首先有一个称为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)
那么为什么您期望父类在这里是
TestListItemModel
和TestListModel
知道其子类。所以在这个功能
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/