2016-04-25 3 views
0

Я пытался конвертировать из Swift 1 до 2 в строке if let jsonData Array = try NSJSONSerialization..., потому что она изначально давала мне ошибку из «лишнего аргумента» при вызове «поэтому я добавил« try »перед NSJSONSerialization, но теперь он говорит« Неверное преобразование из функции бросания типа '(NSData!, NSError!) throws ->()' to non-throwing function type '(NSData!, NSError!) -> Void'. ошибка не обрабатывается должным образом, но я не знаю, как это сделать. Вот кодНеверное преобразование из функции бросания типа '(NSData !, NSError!) Throws ->()' для не-бросания функции типа '(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

По какой-то причине он не показывает первые несколько строк в качестве кода. Прежде чем «return» будет httpHelper.sendRequest (httpRequest, завершение: {(данные: NSData !, error: NSError!) В , если ошибка! = Nil { let errorMessage = self.httpHelper.getErrorMessage (ошибка) let errorAlert = UIAlertView (название: «Ошибка», сообщение: errorMessage as String, delegate: nil, cancelButtonTitle: «Ok») errorAlert.show() – Nick

ответ

0

во-первых, вы должны быть оборачивать любые функции, которые вызывают throws в do-try-catch цикла. во-вторых, безопасно разворачивать jsonArray как Swift массив, а не пытается заставить бросить его в NSArray:

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