2016-04-25 14 views
0

Ich habe versucht, von Swift 1 zu konvertieren zu 2 in der Zeile if let jsonData Array = try NSJSONSerialization..., weil es ursprünglich gab mir einen Fehler von der "extra Argument 'Fehler' im Aufruf", so habe ich das "try" vor NSJSONSerialization, aber jetzt sagt es "Ungültige Konvertierung von werfen Funktion des Typs '(NSData!, NSError!) throws ->()' to non-throwing function type '(NSData!, NSError!) -> Void'. Ich denke der Fehler nicht richtig gehandhabt, aber ich weiß nicht, wie das zu tun. Hier ist der CodeUngültige Konvertierung von werfen Funktion des Typs '(NSData !, NSError!) Wirft ->()' zu nicht-werfen Funktionstyp '(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

Aus irgendeinem Grund ist es nicht die ersten paar Zeilen als Code zeigt. Vor "return" ist httpHelper.sendRequest (httpRequest, Abschluss: {(Daten: NSData !, Fehler: NSError!) In wenn Fehler! = Nil { lassen Sie errorMessage = self.httpHelper.getErrorMessage (Fehler) lassen Sie errorAlert = UIAlertView (titel: "Fehler", nachricht: errorMessage als String, delegate: nil, cancelButtonTitle: "Ok") errorAlert.show() – Nick

Antwort

0

Zunächst sollten Sie alle Funktionen werden Verpackung, die throws in einer do-try-catch Schleife nennen. Zweitens sicher die auspacken jsonArray als Swift Array anstatt zu versuchen, es zu einem NSArray zu zwingen Stimmen:

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