2015-07-22 8 views
6

Ich habe diesen CodeVersuch NSJSONSerialization.JSONObjectWithData auf Swift 2

let path : String = "http://apple.com" 
let lookupURL : NSURL = NSURL(string:path)! 
let session = NSURLSession.sharedSession() 

let task = session.dataTaskWithURL(lookupURL, completionHandler: {(data, reponse, error) in 

    let jsonResults : AnyObject 

    do { 
    jsonResults = try NSJSONSerialization.JSONObjectWithData(data!, options: []) 
    // success ... 
    } catch let error as NSError { 
    // failure 
    print("Fetch failed: \(error.localizedDescription)") 
    } 

// do something 

}) 

task.resume() 

zu verwenden, aber es mit dem Fehler auf der let task Linie versagt:

invalid conversion from throwing function of type (__.__.__) throws to non throwing function type (NSData?, NSURLResponse?, NSError?) -> Void

, was falsch ist? Dies ist Xcode 7 beta 4, iOS 9 und Swift 2.


edit:

das Problem mit diesen Linien

do { 
    jsonResults = try NSJSONSerialization.JSONObjectWithData(data!, options: []) 
    // success ... 
    } catch let error as NSError { 
    // failure 
    print("Fetch failed: \(error.localizedDescription)") 
    } 

entferne ich diese Zeilen und die let task Fehler zu sein scheint, verschwindet .

Antwort

9

Sieht aus wie das Problem in der catch Aussage ist. Der folgende Code wird den beschriebenen Fehler nicht erzeugen.

do { 
    jsonResults = try NSJSONSerialization.JSONObjectWithData(data!, options: []) 
    // success ... 
} catch { 
    // failure 
    print("Fetch failed: \((error as NSError).localizedDescription)") 
} 

ich erkennen, dass der Code, den Sie zur Verfügung gestellt haben soll, korrekt sein, so sollten Sie die Einreichung einen Fehler mit Apple über diese berücksichtigen.

2

Apple ersetzt NSError mit ErrorType in Swift 2 Edit: in vielen Bibliotheken.

Ersetzen Sie also Ihre eigene explizite Verwendung von NSError mit ErrorType.

bearbeiten

Apple hat 2, das für mehrere Bibliotheken in Swift getan, aber noch nicht alles. Sie müssen also immer noch überlegen, wo Sie NSError verwenden und wo ErrorType verwendet werden soll.

2

können Sie auch davon ausgehen, keine Fehler mit:

let jsonResults = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions(rawValue: 0)) 

Schauen Sie, Ma ... keine Hände!

0

Für schnelle 3:

do { 
    jsonResults = try JSONSerialization.JSONObject(with: data!, options: []) 
// success ... 
} catch {// failure 
    print("Fetch failed: \((error as NSError).localizedDescription)") 
}