我正在尝试使用SwitfyJson制作通用灭菌器功能。 目前我收到服务器响应的每个地方,我正在解析如下:
let json = JSON(data : networkResponse.data!)
let usersJson = json["data"]
var users = [User]()
for (_,subJson):(String, JSON) in usersJson {
let user = User(json: subJson)
users.append(user)
}
现在这反过来我每次都得到回复。 我正在尝试使用通用功能。看起来应该是这样的:
protocol Serializable {
init(json: JSON)
}
func serializeToArray(data: NSData, serializable: Serializable)->serializable {
let json = JSON(data : data)
let jsonObjects = json["data"]
var serializedObjects = [serializable.classType]()
for (_,subJson):(String, JSON) in jsonObjects {
let serializedObject = User(json: subJson)
serializedObjects.append(user)
}
return serializedObjects
}
但是这个“classType”在Swift中不可用。 有没有办法实现这个目标?
答案 0 :(得分:0)
也许这更像是你正在寻找的东西:
static func serializeToArray(json:[String:AnyObject]) {
var serializedObjects = [Serializable]()
guard let jsonArray = json["data"] as? Array<[String:AnyObject]> else {
return [Serializable]()
}
for jsonDict in jsonArray {
serializedObjects.append(Serializable(init:jsonDict))
}
return serializedObjects
}
答案 1 :(得分:0)
您可以使序列化方法使用泛型类型。 看起来你只需要数组的类型。
func serializeToArray<SerializableType : Serializable>(data: NSData, serializableType: SerializableType.Type)-> [SerializableType] {
// stuff
var serializedObjects = [SerializableType]()
// more stuff
return serializedObjects
}
这样,您可以将类型传递给函数,而无需首先实例化对象:
let users = serializeToArray(data: data, serializableType: User.self)
返回的结果将是[User]