2017-03-17 2 views
1

私はここで私はAlamofireを通じて私のバックエンドのコードを呼んでいるSwiftのコードを持っている:メンバーjsonObjectへのあいまいな参照のため、alamofireコードをコンパイルできません。どうして?

Alamofire.request(url, method: .post, parameters: (parameters), encoding: JSONEncoding.default) 
    .validate() 
    .responseJSON { response in 
     switch response.result { 
     case .success: 
      do { 
      if let jsonData = try JSONSerialization.jsonObject(with: response.result.value, options:.allowFragments) as? [String:Any] { 
       for requestJSON in jsonData["geojson"]["features"] { 
        if let request = SingleCluster.fromJSON(JSON(requestJSON)){ 
         let pinOne = CustomCluster() 
         pinOne.coordinate = CLLocationCoordinate2D(latitude: request.latitude, longitude: request.longitude) 
         pinOne.amount = request.amount 

         self.eventsArray.append(pinOne); 
        } 
       } 
      } 
      } catch let err{ 
       print(err.localizedDescription) 
      } 

      completionHandler!() 

     case .failure(let error): 
      print("error") 
     } 

} 

問題は、この行ということです:

Ambiguous reference to member 'jsonObject(with:options:)' 

if let jsonData = try JSONSerialization.jsonObject(with: response.result.value, options:.allowFragments) as? [String:Any] { 

がエラーをもたらします

[String:Any]または[String:AnyObject]にキャストしようとしましたが、何も変更されませんでした。私はここで間違って何をしていますか?

+0

おそらく以下のSOスレッドは役に立ちますか? http://stackoverflow.com/questions/40558133/serializing-json-object-with-alamofire – Fahim

+0

@Fahimええ私はそれを見ましたが、答えにコードスニペットがないために、この答えを使う:( – user3766930

答えて

1

あなたはそうあなたは、完了ブロックに直接JSONSerialization使用を使用する必要が直列化されたJSONを取得しませんAlamofireresponseJSONを使用していました。

switch response.result { 
case .success: 
    if let jsonData = JSON(response.result.value) { 
     for requestJSON in jsonData["geojson"]["features"] { 
       if let request = SingleCluster.fromJSON(requestJSON){ 
        let pinOne = CustomCluster() 
        pinOne.coordinate = CLLocationCoordinate2D(latitude: request.latitude, longitude: request.longitude) 
        pinOne.amount = request.amount 
        self.eventsArray.append(pinOne); 
       } 
      } 
    } 
case .failure(let error): 
     print("error") 
} 
0

変更この行:

if let jsonData = try JSONSerialization.jsonObject(with: response.result.value, options:.allowFragments) as? [String:Any] { 

へ:

if let data = response.data, let jsonData = try JSONSerialization.jsonObject(with: data, options:.allowFragments) as? [String:Any] { 
関連する問題