Edu*_*Edu 2 json swift alamofire
我已经尝试了很多库,Alamofire,JsonHelper,ObjectMapper等...但不幸的是,我不能将json集合响应映射到对象类.我开发了一个带有swift 1.2和xcode 6.3的IOS 8应用程序,我的模型的两个类是:
Club.swift
class Club {
var id: String = ""
var name: String = ""
var imageUrl: String = ""
var hasVip: Bool = false
var desc: String = ""
var location: [Location] = []
}
Run Code Online (Sandbox Code Playgroud)
Location.swift
class Location {
var country: String = ""
var city: String = ""
var address: String = ""
var zip: String = ""
var underground: [String] = []
}
Run Code Online (Sandbox Code Playgroud)
我有另一个类要求我的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)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为,有一种简单的方法可以在swift中映射对象.我想知道,如何将completionHandler(数据)转换为[Club]对象?
let data = 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"
}
}]
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用ObjectMapper上面提到的库来执行此操作.只需创建Club类并确保它实现Mappable协议.然后您可以使用ObjectMapper如下映射数据:
let clubs = Mapper<Club>().mapArray(JSONString)
完全披露:我是ObjectMapper的作者.
| 归档时间: |
|
| 查看次数: |
4964 次 |
| 最近记录: |