如何获取 swift 中数组的元素类型
how to get element type for array in swift
首先有一个基础class叫做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
还有一个class继承自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
中有一个 class 子模型的 TestListItemModel
class TestListItemModel:BaseModel {
var imgurl: Any?
var title: Any?
}
问题是:
我想从 json 数据中自动解析 BaseModel class 中的所有属性值。
在func analysetDictionaryToAttributes: 可以找到哪个是Array,但是不知道怎么获取这个类型继续调用它的analysetDictionaryToAttributes func.
为什么您希望在 BaseModel
class 函数中得到 TestListItemModel
。首先,我看不到任何具有 TestListItemModel
的结构。因为我可以看到你只是传递 json 字典对象,它不知道你在这一行 class 'TestListItemModel'
self.setDictionaryToAttributes(dictionary_is: dic)
那你为什么期望父 class 会知道它的子 class 这里是 TestListItemModel
和 TestListModel
。
所以在这个函数中
public func setDictionaryToAttributes(dictionary_is dictionary:Dictionary<String,Any>?)->Bool
您将始终获得字符串字典作为键,值作为任意类型。如果你期待 String 那么你总是可以这样检查它
if value = value as String
{
print(value)
}
首先有一个基础class叫做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
还有一个class继承自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
中有一个 class 子模型的 TestListItemModelclass TestListItemModel:BaseModel {
var imgurl: Any?
var title: Any?
}
问题是: 我想从 json 数据中自动解析 BaseModel class 中的所有属性值。 在func analysetDictionaryToAttributes: 可以找到哪个是Array,但是不知道怎么获取这个类型继续调用它的analysetDictionaryToAttributes func.
为什么您希望在 BaseModel
class 函数中得到 TestListItemModel
。首先,我看不到任何具有 TestListItemModel
的结构。因为我可以看到你只是传递 json 字典对象,它不知道你在这一行 class 'TestListItemModel'
self.setDictionaryToAttributes(dictionary_is: dic)
那你为什么期望父 class 会知道它的子 class 这里是 TestListItemModel
和 TestListModel
。
所以在这个函数中
public func setDictionaryToAttributes(dictionary_is dictionary:Dictionary<String,Any>?)->Bool
您将始终获得字符串字典作为键,值作为任意类型。如果你期待 String 那么你总是可以这样检查它
if value = value as String
{
print(value)
}