使用 ObjectMapper 和 swift 泛化函数以将 JSON 映射到对象 3
Generalizing a function to map JSON to Object using ObjectMapper and swift 3
我正在使用 ObjectMapper
在 Swift 3 中开发一个项目,并且我有很多使用相同代码的功能。
进行转换的函数是这样的:
func convertCategories (response:[[String : Any]]) {
let jsonResponse = Mapper<Category>().mapArray(JSONArray: response )
for item in jsonResponse!{
print(item)
let realm = try! Realm()
try! realm.write {
realm.add(item)
}
}
}
我想将 Category (Mapper) 作为参数传递,这样我就可以将任何类型的 Class 类型传递给函数,并且只使用一个函数来完成这项工作,它看起来像这样:
func convertObjects (response:[[String : Any]], type: Type) {
let jsonResponse = Mapper<Type>().mapArray(JSONArray: response )
...
我想了很多但没有结果,¿谁能帮我实现这个目标?
已编辑:对于所有遇到同样问题的人,解决方案是这样的:
func convertObjects <Type: BaseMappable> (response:[[String : Any]], type: Type)
{
let jsonResponse = Mapper<Type>().mapArray(JSONArray: response )
for item in jsonResponse!{
print(item)
let realm = try! Realm()
try! realm.write {
realm.add(item as! Object)
}
}
}
调用函数是:
self.convertObjects(response: json["response"] as! [[String : Any]], type: type)
我怀疑您只是遇到了语法问题。你的意思是这样的:
func convertObjects<Type: BaseMappable>(response:[[String : Any]], type: Type)
你也可以这样写(有时更易读,尤其是当事情变得复杂时):
func convertObjects<Type>(response:[[String : Any]], type: Type)
where Type: BaseMappable {
您通常将其称为:
convertObjects(response: response, type: Category.self)
重点是 convertObjects
需要专门针对您要转换的每种类型,这需要声明类型参数 (<Type>
)。
我正在使用 ObjectMapper
在 Swift 3 中开发一个项目,并且我有很多使用相同代码的功能。
进行转换的函数是这样的:
func convertCategories (response:[[String : Any]]) {
let jsonResponse = Mapper<Category>().mapArray(JSONArray: response )
for item in jsonResponse!{
print(item)
let realm = try! Realm()
try! realm.write {
realm.add(item)
}
}
}
我想将 Category (Mapper) 作为参数传递,这样我就可以将任何类型的 Class 类型传递给函数,并且只使用一个函数来完成这项工作,它看起来像这样:
func convertObjects (response:[[String : Any]], type: Type) {
let jsonResponse = Mapper<Type>().mapArray(JSONArray: response )
...
我想了很多但没有结果,¿谁能帮我实现这个目标?
已编辑:对于所有遇到同样问题的人,解决方案是这样的:
func convertObjects <Type: BaseMappable> (response:[[String : Any]], type: Type)
{
let jsonResponse = Mapper<Type>().mapArray(JSONArray: response )
for item in jsonResponse!{
print(item)
let realm = try! Realm()
try! realm.write {
realm.add(item as! Object)
}
}
}
调用函数是:
self.convertObjects(response: json["response"] as! [[String : Any]], type: type)
我怀疑您只是遇到了语法问题。你的意思是这样的:
func convertObjects<Type: BaseMappable>(response:[[String : Any]], type: Type)
你也可以这样写(有时更易读,尤其是当事情变得复杂时):
func convertObjects<Type>(response:[[String : Any]], type: Type)
where Type: BaseMappable {
您通常将其称为:
convertObjects(response: response, type: Category.self)
重点是 convertObjects
需要专门针对您要转换的每种类型,这需要声明类型参数 (<Type>
)。