2016-04-25 11 views
0

Swift 1私はNSJSONSerializationの前に "try"を追加しましたが、今は "'(NSData!, NSError!) throws ->()' to non-throwing function type '(NSData!, NSError!) -> Void'の関数を投げて無効な変換をしています。私は思っています。エラーが適切に処理されていませんが、私はそれを行う方法がわからない。ここで'(NSData!、NSError!)throwing - >()' throwing function type '(NSData !, NSError!) - > Void'のタイプのスローイングから無効な変換へ

httpHelper.sendRequest(httpRequest, completion: {(data:NSData!, error:NSError!) in 
     if error != nil { 
      let errorMessage = self.httpHelper.getErrorMessage(error) 
      let errorAlert = UIAlertView(title:"Error", message:errorMessage as String, delegate:nil, cancelButtonTitle:"Ok") 
      errorAlert.show() 

      return 
     } 

     var error: NSError? 

     // let jsonDataDict = try? NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(0), error: &error) as! NSDictionary 
     // let jsonDataDict = try? NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(rawValue: 0)) as! NSDictionary 

     if let jsonDataArray = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(rawValue: 0)) as? NSArray! { 
      //load collection view with selfies 
      if jsonDataArray != nil { 
       for imageDataDict in jsonDataArray { 
        var selfieImgObj = SelfieImage() 

        selfieImgObj.imageTitle = imageDataDict.valueForKey("title") as! String 
        selfieImgObj.imageId = imageDataDict.valueForKey("random_id") as! String 
        selfieImgObj.imageThumbnailURL = imageDataDict.valueForKey("image_url") as! String 

        self.dataArray.append(selfieImgObj) 
       } 

       self.collectionView?.reloadData() 
      } 
     } 
     }) 
    } 
+0

何らかの理由でそれがコードとして最初の数行を示していません。 error!= nilの場合、httpHelper.sendRequest(httpRequest、completion:{(data:NSData!、error:NSError!)のエラーメッセージが返されます。 let errorMessage = self.httpHelper.getErrorMessage(error) let errorAlert = UIAlertView (タイトル: "Error"、メッセージ:errorMessage as String、デリゲート:nil、cancelButtonTitle: "Ok") errorAlert.show() – Nick

答えて

0

まずコードです、あなたがdo-try-catchループでthrowsを呼び出す任意の関数をラップしなければならない。第二に、安全にアンラップjsonArrayNSArrayにキャスト強制しようとするのではなくスウィフト配列として:

do { 
    if let jsonArray = try NSJSONSerialization.JSONObjectWithData(NSData(), options: .AllowFragments) as? [AnyObject] { 
     // unarchived data is an array 
    } 
} catch { 
    print(error) 
} 
関連する問題