2016-04-17 2 views
2

enter image description hereDowncast von 'String ?!' 'String' entpackt nur Optionale; Wolltest du '!!' benutzen? in schnellen

Source-Code sind unten

let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) 
         if let blogs = json["profile_image_url"] as? String { 

          userImage = blogs//json["profile_image_url"] as! String 
          print("USER IMAGE:\(userImage)") 

, wie ich dieses Problem lösen

+0

machen es genau wie diese 'json [„profile_image_url“] als String?' – HardikDG

+0

@Pyro kraft auszupacken, wo immer möglich zu vermeiden, ist es zu Fehlern und Laufzeit Abstürze führt. – ColGraff

+0

@ luk2302 es funktioniert perfekt. Ich habe ein anderes Problem Lassen Sie Kommentare = unwrapResults.items as! Array Fehler ist mehrdeutige Verwendung von Elementen –

Antwort

6

Sie wollen jede Optional testen und auspacken, bevor Sie sie verwenden. Dazu gehören auch Modelle wie as?. Wenn Sie es vermeiden können, sollten Sie nicht erzwingen oder explizit nicht ausgepackt Optional (mit einem ! markiert) verwenden, weil sie zu unerwarteten Laufzeitabstürzen führen.

import Foundation 

// create test data 
let testJson = ["profile_image_url": "http://some.site.com/"] 
var data: NSData? 

// convert to NSData as JSON 
do { 
    data = try NSJSONSerialization.dataWithJSONObject(testJson, options: []) 
} catch let error as NSError { 
    print(error) 
} 

// decode NSData 
do { 
    // test and unwrap data 
    if let data = data { 
    let json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) 
    // test and unwrap cast to String 
    if let userImage = json["profile_image_url"] as? String { 
     print("USER IMAGE:\(userImage)") 
    } 
    } 
} catch let error as NSError { 
    print(error) 
} 
+1

Warte, du machst das auch, wenn XXX = json ["profile_image_url"] als? String', wie OP. Was ist der Unterschied? –

+1

Der Hauptunterschied besteht darin, dass ich alle "optionalen" Unwrapping und Fehler um diese Aussage handhabt, die das OP nicht war. Sobald der Code zu diesem Punkt kommt, sollte alles gültig sein und sollte keine Probleme erzeugen. – ColGraff

Verwandte Themen