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% 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% 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:
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.