首先有一个称为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函数。

最佳答案

为什么期望在您的TestListItemModel类函数中获得BaseModel。首先,我看不到任何具有TestListItemModel的结构。因为我可以看到您只是在此行中传递了不知道您的类'TestListItemModel'的json字典对象

self.setDictionaryToAttributes(dictionary_is: dic)


那么为什么您期望父类在这里是TestListItemModelTestListModel知道其子类。

所以在这个功能

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

您将始终获得“字符串字典”作为键,而“值”作为任何类型。而且,如果您期望使用String,则可以始终通过这种方式进行检查

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

关于swift - 如何快速获取数组的元素类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44714604/

10-11 00:37