【发布时间】:2015-07-05 06:17:06
【问题描述】:
我尝试了很多库,Alamofire、JsonHelper、ObjectMapper 等...,但不幸的是,我无法将 json 集合响应映射到对象类中。 我正在使用 swift 1.2 和 xcode 6.3 开发一个 IOS 8 应用程序,我的模型的两个类别是:
俱乐部.swift
class Club {
var id: String = ""
var name: String = ""
var imageUrl: String = ""
var hasVip: Bool = false
var desc: String = ""
var location: [Location] = []
}
Location.swift
class Location {
var country: String = ""
var city: String = ""
var address: String = ""
var zip: String = ""
var underground: [String] = []
}
我有另一个类要向我的 API 请求:
apliClient.swift
class ApiClient {
var clubs = [Club]?()
func getList(completionHandler: ([JSON]) -> ()) {
let URL = NSURL(string: "https://api.com/v1/clubs")
let mutableURLRequest = NSMutableURLRequest(URL: URL!)
mutableURLRequest.setValue("Content-Type", forHTTPHeaderField: "application/json")
mutableURLRequest.HTTPMethod = "GET"
mutableURLRequest.setValue("Bearer R01.iNsG3xjv/r1LDkhkGOANPv53xqUFDkPM0en5LIDxx875fBjdUZLn1jtUlKVJqVjsNwDe1Oqu2WuzjpaYbiWWhw==", forHTTPHeaderField: "Authorization")
let manager = Alamofire.Manager.sharedInstance
let request = manager.request(mutableURLRequest)
request.responseJSON { (request, response, json , error) in
if (json != nil){
var jsonObj = JSON(json!)
if let data = jsonObj["hits"].arrayValue as [JSON]?{
completionHandler(data)
}
}
}
}
}
我认为,有一种简单的方法可以快速映射对象。我想知道,如何将completionHandler(data) 转换为[Club] 对象?
让数据 = jsonObj["hits"].arrayValue as [JSON]? 是
[{
"_id" : "5470def9e0c0be27780121d7",
"imageUrl" : "https:\/\/s3-eu-west-1.amazonaws.com\/api-static\/clubs\/5470def9e0c0be27780121d7_180.png",
"name" : "Mondo",
"hasVip" : false,
"location" : {
"city" : "Madrid"
}
}, {
"_id" : "540b2ff281b30f3504a1c72f",
"imageUrl" : "https:\/\/s3-eu-west-1.amazonaws.com\/api-static\/clubs\/540b2ff281b30f3504a1c72f_180.png",
"name" : "Teatro Kapital",
"hasVippler" : false,
"location" : {
"address" : "Atocha, 125",
"city" : "Madrid"
}
}, {
"_id" : "540cd44581b30f3504a1c73b",
"imageUrl" : "https:\/\/s3-eu-west-1.amazonaws.com\/api-static\/clubs\/540cd44581b30f3504a1c73b_180.png",
"name" : "Charada",
"hasVippler" : false,
"location" : {
"address" : "La Bola, 13",
"city" : "Madrid"
}
}]
【问题讨论】:
-
在
Club中创建一个init,它接受一个JSON对象,然后循环遍历数组元素并从每个元素中创建一个Club对象,将该元素附加到数组中,然后通过完成块传递该数组。 -
为什么不使用 SwitfyJSON 和 Alamofire?