2016-02-26 149 views
0

我有一個在迅速創建一個從節點的JSON對象的功能:爲什麼我不能用AlamoFire和SwiftyJson快速創建我的類的對象?

class func fromJSON(json: JSON) -> SingleRequest? { 
    var title: String 
    if let titleOrNil = json["title"].string { 
     title = titleOrNil 
    } else { 
     title = "" 
    } 
    let locationName = json["location"].string 
    let discipline = json["discipline"].string 



    let lat = json["location"]["coordinates"][1].doubleValue 
    let lon = json["location"]["coordinates"][0].doubleValue 
    let coordinate = CLLocationCoordinate2D(latitude: lat, longitude: lon) 
    return SingleRequest(title: title, locationName: locationName!, discipline: discipline!, coordinate: coordinate) 
} 

現在,使用alamofireswiftyJson我想從我的web服務獲取的所有數據,並創建SingleRequest對象。我這樣做,如下圖所示:

func fetchRequests(radius: Double, lat: Double, lon: Double){ 
    Alamofire.request(.GET, "https://mywebservice") 
     .responseJSON { response in 

      switch response.result { 
      case .Success: 


       if let jsonData = response.result.value { 
        for requestJSON in jsonData { 
         if let request = SingleRequest.fromJSON(requestJSON){ 
          //do sth with a single request here 
          //e.g. print(request.discipline) 
         } 
        } 
       } 


      case .Failure(let error): 
       print("SWITCH ERROR") 
       print(error) 
      } 

    } 
} 

,但我得到一個錯誤:

enter image description here

所以我的問題是 - 如何使用alamoFireSwiftyJson我可以創造我的自定義SingleRequest

回答

1

你的問題是在這裏:

if let jsonData = response.result.value { 
    for requestJSON in jsonData { 
     if let request = SingleRequest.fromJSON(JSON(requestJSON)){ 
      //do sth with a single request here 
      //e.g. print(request.discipline) 
     } 
    } 
} 

jsonData是,你需要轉換爲[[String: AnyObject]]AnyObject

if let jsonData = response.result.value as? [[String: AnyObject]] { 
    for requestJSON in jsonData { 
     if let request = SingleRequest.fromJSON(requestJSON){ 
      //do sth with a single request here 
      //e.g. print(request.discipline) 
     } 
    } 
} 

錯誤說的是因爲response.result.value默認爲AnyObject,所以它是不可迭代的。這就是爲什麼您需要將其轉換爲數組(例如,一組字典:[[String: AnyObject]])。

+0

謝謝,我遵循你的建議,但是當我使用你的代碼片斷時,我得到一個錯誤:http://i.imgur.com/5NSkum2.png有沒有解決這個問題的方法? – user3766930

+0

我編輯了我的答案。基本上,你需要從'requestJSON'創建一個'JSON'對象,因爲'fromJSON'需要一個JSON對象。 – paulvs

0

誠然,我不知道是什麼「型」 response.result.value是的,但如果它可以轉換的東西,可以重複那麼這裏的一個例子:

if let jsonData = response.result.value as? [(some type that can be iterated)] { 
    // do something with jsonData ... 
} 
相關問題