Der Initialisierer für die bedingte Bindung muss den optionalen Typ haben, nicht 'AnyObject - Approach

8

Der folgende Code gibt eine Meldung aus, die besagt "Initialisierer für bedingte Bindung muss optionalen Typ haben, nicht 'AnyObject'"

%Vor%

Um den obigen Fehler zu beheben, habe ich den folgenden Code verwendet.

%Vor%

Gibt es einen besseren Ansatz als oben oder mein Code könnte abstürzen?

Es gibt einen weiteren Code, den ich hinzufügen möchte, wenn Sie nil check , type check und dann Cast-Check verwenden. Der Grund dafür Swift bietet große Flexibilität, aber ein wenig schwierig zu beheben Probleme. Nehmen wir an, ich habe ein Wörterbuch, cityDetails , und ich versuche, Daten für self.cityZipCode und self.cityIdentifier zu erhalten, die optional sind, definiert als var cityZipCode: Int? und var cityIdentifier: Int?

%Vor%     
andyPaul 28.10.2015, 01:48
quelle

2 Antworten

5

Sie müssen das Ergebnis nicht aus try auspacken. Es ist nicht optional. Sie müssen das Ergebnis von try auf ein NSDictionary umwandeln. Verwenden Sie as? , um es zu verkleinern.

Bewährtes Verfahren : Voller Zugriff auf zurückgegebenen Fehler für eine gute Fehlerbehandlung

%Vor%

Schnell und schmutzig : Fehlerbehandlung ist nichts für mich!

%Vor%

Bad Ass Mode : Abstürze sind Features

%Vor%

Einige zusätzliche Informationen zu mehreren Auspackungen: Schreibe den Code unten auf einen Spielplatz.

%Vor%     
R Menke 28.10.2015, 01:56
quelle
1

Sie suchen nach as? , das versucht, das Ding auf der linken Seite in den Typ auf der rechten Seite zu konvertieren, und gibt nil zurück, wenn die Konvertierung nicht möglich ist:

%Vor%

Sie müssen in Swift selten isKindOfClass verwenden. Wenn Sie feststellen, dass Sie es verwenden, fragen Sie nach dem Grund und überlegen Sie, ob as oder as? stattdessen funktionieren.

    
Paul Cantrell 28.10.2015 03:38
quelle

Tags und Links