Использование swift 1.2, xcode 6.3 и IOS 8, Im пытается создать объект из json-ответа, используя класс NSJSONSerialization. ответ JSON является:объекты здания из ответа json с использованием NSJSONSerialization
[{
"_id" : "5470def9e0c0be27780121d7",
"imageUrl" : "https:\/\/s3-eu-west-1.amazonaws.com\/myapi-static\/clubs\/5470def9e0c0be27780121d7_180.png",
"name" : "Mondo",
"hasVip" : false,
"location" : {
"city" : "Madrid"
}
}, {
"_id" : "540b2ff281b30f3504a1c72f",
"imageUrl" : "https:\/\/s3-eu-west-1.amazonaws.com\/myapi-static\/clubs\/540b2ff281b30f3504a1c72f_180.png",
"name" : "Teatro Kapital",
"hasVip" : false,
"location" : {
"address" : "Atocha, 125",
"city" : "Madrid"
}
}, {
"_id" : "540cd44581b30f3504a1c73b",
"imageUrl" : "https:\/\/s3-eu-west-1.amazonaws.com\/myapi-static\/clubs\/540cd44581b30f3504a1c73b_180.png",
"name" : "Charada",
"hasVip" : false,
"location" : {
"address" : "La Bola, 13",
"city" : "Madrid"
}
}]
объект класса (Club.swift) с реализацией NSJSONSerialization.JSONObjectWithData является:
class Club: NSObject {
var id: String = ""
var name: String = ""
var imageUrl: String = ""
var hasVip: Bool = false
var desc: String = ""
var location: [Location] = []
init(JSONString: String) {
super.init()
var error : NSError?
let JSONData = JSONString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
let JSONDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(JSONData!, options: nil, error: &error) as! NSDictionary
self.setValuesForKeysWithDictionary(JSONDictionary as [NSObject : AnyObject])
}
}
и, наконец, класс ApiClient является
class ApiClient {
func getList(completionHandler: ([JSON]) ->()) {
let URL = NSURL(string: "https://myapi.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]?{
var aClub : Club = Club(JSONString: data)
println(aClub.name)
completionHandler(data)
}
}
}
}
}
, но проблема в том, когда я пытаюсь Println (aClub.name) ошибка
«не может ссылаться на инициализатор для type'Club» со списком аргументов типа (JSONString [JSON]) "
Я не знаю, как я мог бы использовать класс NSJSONSerialization со сложным ответом JSON.
Извините Роб, но вызов «ApiClient.getList() {clubs, error in ...» дает мне эту ошибку «Невозможно вызвать getList с помощью списка аргументов типа ((_, _) -> _)» – Edu
Роб, возвращаясь к этой теме, ответ json после request.responseJSON представляет собой массив ** ["hits"] **, но println (arrayOfDictionaries) пуст. Обратите внимание, что ответ JSON, который я напечатал сверху, представляет собой массив JSON после того, как ** let data = jsonObj ["hits"]. ArrayValue как [JSON]? **, потому что в этой строке я извлекаю ** ["хиты" ] ** значение ответа JSON – Edu
Извините, Роб, я не очень хорошо объясняю, не используя swiftyjson, ответ json - это массив ударов, но когда я пытаюсь преобразовать его в [string: anyObject], то arrayOfDictionaries пуст. – Edu