gpt4 book ai didi

arrays - SWIFT - 如何获取数组的类型?

转载 作者:搜寻专家 更新时间:2023-10-31 19:39:44 25 4
gpt4 key购买 nike

我正在编写一个通用方法,该方法采用字典和给定类型的参数来构建对象。

例如,如果您发出获取电影的 SOAP 请求并将响应保存在字典中,您可以:

var movie : Movie = myGenericMethod(dic : Dictionary, objectToIntrospect : Movie()) as Movie

适用于:

  • 简单对象
  • 复杂对象

但是如果你有一个对象数组,我就有问题了。所以想象一下你的电影对象包含一个 Actor 数组......

通过反射,我获得了类(class)的所有类型的属性。有了这个,我构建了一个包含我的类型的任何对象的数组。例如,一个对象包含在其他对象(电影中的 Actor )中:

//All type of attributes of my movie object, at index [i] i have my "Actor" object
var anyType : Any = typesOfProperties[i]

//I cast it in object
var objectType : NSObject = anyType as NSObject

//Dont worry about this method, it's just for get the dictionary
var 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 type
var 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 对象。

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

这是我目前拥有的:

var objToAdd: NSObject = self.buildAnyObjectWithDictionary(newDic, soapAction: "", objectToIntrospect: Actor()) as NSObject

arraySpecific.append(objToAdd)

如您所见,如果我对类型进行硬编码,则此方法可以完美运行。但我需要让它像前面的例子一样!像那样:

var objToAdd: NSObject = self.buildAnyObjectWithDictionary(newDic, soapAction: "", objectToIntrospect: anObjectWithActorType) as NSObject

arraySpecific.append(objToAdd)

(第一版和第二版的区别在于objectToIntrospect参数)

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

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

PS:抱歉我的英语不好,我希望你能理解我:)

最佳答案

好的,我回到我的帖子,因为我找到了解决方案:我创建了一个大师类,我所有的类(class)都继承了这个类(class)。

这个父类(super class)有一个名为 getArrayType 的方法。

如果我的一个子类需要与我的泛型方法一起使用,并且如果她包含一个数组,则他们需要重写 getArrayType。

像那样:

override func getArrayType(anyType : Any) -> String {
var className = " "
if(anyType as? NSObject == rows){
className = Properties.PROJECT_NAME + ".SimpleRow"
}
return className
}

我这样调用这个方法(TObject 是我的父类(super class)):

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

这很完美,但是您需要重写一个方法。如果您遇到同样的问题,我希望这对您有所帮助!

关于arrays - SWIFT - 如何获取数组的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28879954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com