如何在swift中获取数组的元素类型

时间:2017-06-23 06:37:04

标签: swift xcode swift3 runtime dynamic-binding

首先有一个基类叫做BaseModel,下面是代码:

class BaseModel : NSObject
{
    var code:Int?        
    var message:Any?  

    public func setDictionaryToAttributes(dictionary_is dictionary:Dictionary<String,Any>?)->Bool
    {
        guard let dic:Dictionary<String,Any> = dictionary else {return false}

        for (key,value) in dic {
            let someType = type(of: value)
            debugPrint("\(String(describing: someType.self))")
            debugPrint("\(String(describing: someType))")
            if someType is Array<Any>.Type { //i can't get TestListItemModel string               
                debugPrint("\(String(describing: someType))")
            }
        }

        self.setValuesForKeys(dic)
        return true;
    }
}//class BaseModel end

还有另一个继承自BaseModel的类

class TestListModel: BaseModel {
    var tatalink:Any?
    var items:Array<TestListItemModel>? 

    func setValuesFrom(jsonData j:JSON) { //j is a swifyJson object

        guard var dic = j.dictionaryObject else {return}
        if self.setDictionaryToAttributes(dictionary_is: dic)==false {
            return
        } 
   }
}

TestListModel中有一个用于子模型的TestListItemModel类

class TestListItemModel:BaseModel {
    var imgurl:       Any? 
    var title:        Any? 
}

问题是: 我想从json数据中自动解析BaseModel类中的所有属性值。 在func analysetDictionaryToAttributes:我可以找到哪一个是Array,但我不知道如何获得这种类型并继续调用它的analysetDictionaryToAttributes func。

1 个答案:

答案 0 :(得分:0)

为什么期望在TestListItemModel课程函数中获得BaseModel。首先,我看不到任何具有TestListItemModel的结构。因为我可以看到你只是传递json字典对象,它不知道你的类&#39; TestListItemModel&#39;在这一行

self.setDictionaryToAttributes(dictionary_is: dic)

那么为什么你希望父类知道它的子类是TestListItemModelTestListModel

所以在这个函数中

public func setDictionaryToAttributes(dictionary_is dictionary:Dictionary<String,Any>?)->Bool

您将始终将String of Dictionary作为键,Value作为Any类型。如果您期待String,那么您可以随时检查它

if value = value as String
{
   print(value)
}