2016-05-20 2 views
0

Nach dem cocoapods Upgrade 1.0, erhalte ich diese Zusammenstellung Fehler für diese Codezeilen:Swift-Kompilierungsfehler: Downcast von 'String ?!' 'String' entpackt nur Optionale; Wolltest du '!!' benutzen?

var strName = String() 
var strEmail = String() 
var strFacebookID = String() 
var strPassword = String() 
var objHelper = Helper() 

.... 

let strFirstName = result["first_name"] as! String 
let strLastName = result["last_name"] as! String 
self.strName = strFirstName + "_" + strLastName 
self.strEmail = result["email"] as! String 
self.strFacebookID = result["id"] as! String 

Downcast from 'String?!' to 'String' only unwraps optionals; did you mean to use '!!'?

Hier ein Screenshot des Fehlers im Detail ist: http://imgur.com/Efe1nQf

UPDATE: mehr Code hier: https://gist.github.com/anonymous/9c91c2eb1ccf269e78a118970468d1e8

+0

Was die Art des Ergebnisses ist? – PeejWeej

+0

@PEEJWEEJ Laut der Fehlermeldung 'result' ist' AnyObject? '. – vadian

+0

@Axil verwendet es als Wörterbuch, meinst du [String: AnyObject]? – PeejWeej

Antwort

1

Die Fehlermeldung besagt, dass result selbst optional ist, also müssen Sie sowohl result als auch den Wert auspacken.

let strFirstName = result!["first_name"] as! String 

oder besser mit optional für mehr Sicherheitsbindung und weniger type casting

if let userData = result as? [String:String] { 
    let strFirstName = userData["first_name"]! 
    let strLastName = userData["last_name"]! 
} 
+0

das denke ich löst es. bekam andere Fehler herauskommen. Ich habe keine Ahnung, was du tust, als ich versuche, jemand anderen schnellen Code zu reparieren. Was ist das Ausrufezeichen für! und was ist wie? Danke, dass du mir bei meiner Ignoranz geholfen hast. – Axil

+0

Das Ausrufezeichen löst ein optionales Argument aus und verursacht einen Laufzeitfehler (Absturz), wenn das optionale Zeichen 'nil' ist. Das Fragezeichen in Verbindung mit 'if-let' entpackt das Optional und wirft den Wert auf den bestimmten Typ bei Erfolg, andernfalls überspringt die 'if'-Klausel. Bitte lesen Sie die Grundlagen im Swift Language Guide. – vadian

+0

danke. das löst das wahrscheinlich. – Axil

0

result["key"] selbst gibt eine optionale zurück, da es eine Möglichkeit gibt, dass der Schlüssel nicht existiert das Wörterbuch.

Sie müssten zuerst dieses optionale Element auspacken und dann den zurückgegebenen Wert in einen String umwandeln. Versuchen Sie dies:

let strFirstName = result["first_name"]! as! String 

Dies ist eine Art Code-Geruch, es ist eine Menge Casting. Vielleicht sollte das Wörterbuch vom Typ [String : String] sein und nicht so, wie es jetzt ist.

Verwandte Themen