** Cast
** bezieht sich auf die Behandlung von Variablen und Konstanten als spezifischere und universellere Typen.
Zum Beispiel bedeutet dies, eine Variable, die "Beliebiger Typ" war, als "Zeichenfolgentyp" zu behandeln und umgekehrt "Zeichenfolgentyp" als "Beliebiger Typ" zu behandeln.
Es gibt zwei Arten von Besetzungen: "Upcast" und "Downcast". Der Unterschied zwischen Upcast und Downcast besteht darin, ob es sich um einen allgemeineren Typ oder einen konkreten Typ handelt.
Verwenden Sie "Upcast", um es als allgemeineren Wert zu behandeln (größere Gruppe).
Verwenden Sie "as", wenn Sie mit Upcasts arbeiten. Jetzt schreiben wir den Code.
.swift
let string: String = "sample" //Zeichenfolgentyp
let any: Any = string as Any //Upcast vom String-Typ zum Any-Typ
Auf diese Weise ** Wert, den Sie als Typ
** hochladen möchten
Sie können durch Schreiben im Format upcasten.
"Niedergeschlagen" bezieht sich auf die Behandlung als einen spezifischeren Typ. Dies ist bei Downcasts nicht immer der Fall. Beinhaltet die Möglichkeit eines Ausfalls. Lassen Sie uns verstehen, dass die Grammatik auch eine Voraussetzung ist, einschließlich des Scheiterns.
Es gibt zwei Möglichkeiten, einen Downcast mit "als? Oder als!" Zu schreiben.
Jetzt schreiben wir den Code.
Die Art und Weise, mit as?
Zu schreiben, ist wie folgt.
.swift
let any: Any = "sample" as Any
let string = any as? String //Optional("sample")
let int = any as? Int //nil
Versuche, in Zeile 3 des obigen Beispiels auf den Int-Typ herunterzuspielen, schlagen jedoch fehl, da "sample" kein Int-Typ sein kann. In diesem Fall ist der Wert Null.
Das Merkmal von as? Ist das, dass es Null wird, wenn es auf diese Weise versagt? Wenn Sie sich die zweite Zeile ansehen, ist dies ein erfolgreicher Downcast auf den String-Typ, aber der Wert ist ein optionaler Typ vom String-Typ. Dies kann fehlschlagen, daher ist das Ergebnis optional. (Optionaler Typ bedeutet, dass Null auf den Punkt gebracht wird.)
Downcasting mit as? Auf diese Weise wird null angezeigt, wenn das Ergebnis optional ist und fehlschlägt.
① Das Ergebnis ist ein optionaler Typ
② Wenn dies fehlschlägt, ist das Ergebnis gleich Null.
Der Downcast mit as!
Wird wie folgt geschrieben.
.swift
let any: Any = "sample" as Any
let string = any as! String //"sample"
let int = any as! Int //Laufzeit Fehler
Die Schreibmethode selbst unterscheidet sich nicht so sehr von der von?, Aber das Ergebnis ist anders.
Wenn die zweite Zeile wie? Ist, ist der optionale Typ jetzt der String-Typ. Außerdem tritt in der dritten Zeile ein Laufzeitfehler auf.
Für diejenigen, die den optionalen Typ kennen, wurde er möglicherweise grob in Betracht gezogen, aber bei Verwendung von as! Wird das Ergebnis zur Laufzeit zwangsweise entpackt und statt des Ergebnisses nicht zum optionalen Typ, wenn es fehlschlägt. Ein Fehler wird auftreten und die App wird abstürzen. ** Downcasting mit as! Wird als Zwangsguss bezeichnet. ** ** **
① Das Ergebnis ist nicht optional
(2) Wenn dies fehlschlägt, tritt ein Laufzeitfehler auf.
Ich habe eine Downcast-Methode mit "as?" Und "as!"
Anstatt sicher zu sein, müssen Sie schreiben, was zu tun ist, wenn es fehlschlägt. Andererseits riskiert as! Zur Laufzeit einen Fehler, anstatt schreiben zu müssen, was zu tun ist, wenn er fehlschlägt.
Man kann sagen, dass beide Vor- und Nachteile haben, aber ich persönlich denke, es ist besser, als? Zu verwenden, was grundsätzlich sicher ist.
Als gefährliches Muster habe ich versucht, "[Fix]" zu drücken, und es wurde gelöst, also ist es okay! Es ist ein Muster, das bei der Ausführung einen Laufzeitfehler verursacht. Wenn Sie so weit gelesen haben, werden Sie wahrscheinlich verstehen, warum es nicht gut ist, aber beachten Sie, dass die Verwendung von as! Auf diese Weise zu instabilem Code führt.
Ich möchte die Artikel vorstellen, auf die ich mich bei der Veröffentlichung dieses Artikels bezogen habe. https://fukatsu.tech/swift-cast
Dieses Mal habe ich über "Typ Cast" zusammengefasst. Typografie ist ein grundlegender Bestandteil von Swift, aber ich denke, es ist notwendig, sie klar zu verstehen, da es leicht zu unerwarteten Fehlern kommt, wenn Sie damit umgehen, ohne sie zu verstehen, oder vorerst in den Zustand der Beschreibung zu geraten.
Um mein eigenes Lernen zu vertiefen, habe ich es dieses Mal organisiert und veröffentlicht, während ich mich auf andere Artikel bezog. Bitte nehmen Sie Bezug darauf!
Recommended Posts