数组 – SWIFT – 如何获取数组的类型?

数组 – SWIFT – 如何获取数组的类型?,第1张

概述我正在编写一个通用方法,它在参数中使用Dictionary和给定类型来构建对象. 例如,如果您发出一个SOAP请求来获取一部电影,并在Dictionary中收回响应,您可以: var movie : Movie = myGenericMethod(dic : Dictionary, objectToIntrospect : Movie()) as Movie 它适用于: >简单对象 >复杂对象 但 我正在编写一个通用方法,它在参数中使用Dictionary和给定类型来构建对象.

@H_404_8@

例如,如果您发出一个SOAP请求来获取一部电影,并在Dictionary中收回响应,您可以:@H_404_8@

@H_404_8@

var movIE : MovIE = myGenericmethod(dic : Dictionary,objectToIntrospect : MovIE()) as MovIE

它适用于:@H_404_8@

>简单对象
>复杂对象@H_404_8@

但是如果你有一个对象数组我有一个问题.
所以想象你的电影对象包含一个演员阵列……@H_404_8@

通过反射,我得到了我班级所有类型的属性.
有了这个,我构建一个包含我的类型的Any对象数组.
例如,包含在其他对象(MovIE中的Actor)中的对象:@H_404_8@

@H_404_8@

//All type of attributes of my movIE object,at index [i] i have my "Actor" objectvar anyType : Any = typesOfPropertIEs[i]//I cast it in objectvar objectType : NSObject = anyType as NSObject//Dont worry about this method,it's just for get the dictionaryvar otherDico : NSDictionary = ConverterUtilitIEs.extractDictionaryFromOtherDictionary(dict,diconame: property,soapAction: soapAction) as NSDictionary//I build the Actor object with the data of the dictionary. objectType.self give the Actor typevar propertyObject: NSObject = self.buildAnyObjectWithDictionary(otherDico,soapAction: "",objectToIntrospect:objectType.self) as NSObject//I set the property Actor in my MovIE object (myObjectToReturn)... The "property" parameter is the key ConverterUtilitIEs.setPropertyValue(property,value: propertyObject,objectToReturn : myObjectToReturn,isObject : true)

它的工作完美……如果我的电影对象中只有一个actor,那么“propertyObject”将是一个Actor类型,这个原因是objectType是一个Actor对象.@H_404_8@

但是,如果我有一个数组,我重定向处理Array的方法,我的objectType返回“Swift._NSSwiftArrayImpl”,我的anyType对象返回“([myproject.Actor])”.
我不需要知道这只是一个数组,因为我知道它.但我需要知道这是一个Actor数组,用于动态构建一些Actor对象!@H_404_8@

这就是我现在所拥有的:@H_404_8@

@H_404_8@

var objToAdd: NSObject = self.buildAnyObjectWithDictionary(newDic,objectToIntrospect: Actor()) as NSObjectarraySpecific.append(objToAdd)

正如您所看到的,如果我对类型进行硬编码,这项工作就完美无缺.但我需要像前面的例子一样!像那样:@H_404_8@

@H_404_8@

var objToAdd: NSObject = self.buildAnyObjectWithDictionary(newDic,objectToIntrospect: anObjectWithActorType) as NSObjectarraySpecific.append(objToAdd)

(第一个和第二个版本之间的差异是objectToIntrospect参数)@H_404_8@

你知道我如何使用我的Any对象(包含:([myproject.Actor])来构建一个Actor的实例吗?@H_404_8@

我真的需要你的帮助!问候 !@H_404_8@

PS:抱歉我的英语不好,我希望你能理解我:)@H_404_8@解决方法 好的,我回到我的帖子,因为我找到了一个解决方案:
我创建了一个大师班,我的所有班级都是这门班的.

@H_404_8@

这个超类的方法名称为getArrayType.@H_404_8@

如果我的一个child-class需要与我的泛型方法一起使用,并且如果她包含一个Array,则需要覆盖getArrayType.@H_404_8@

像那样:@H_404_8@

@H_404_8@

overrIDe func getArrayType(anyType : Any) -> String {    var classname = " "    if(anyType as? NSObject == rows){        classname = PropertIEs.PROJECT_name + ".SimpleRow"    }    return classname}

我这样称呼这个方法(TObject是我的超类):@H_404_8@

@H_404_8@

var classname = (objectToIntrospect as TObject).getArrayType(anyType)var obj: AnyClass! = NSClassFromString(classname)

这工作完美,但您需要覆盖一个方法.如果你遇到同样的问题,我希望这有助于你!@H_404_8@ 总结

以上是内存溢出为你收集整理的数组 – SWIFT – 如何获取数组的类型?全部内容,希望文章能够帮你解决数组 – SWIFT – 如何获取数组的类型?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1002442.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存