Swift-Optionals
Der optionale Typ (Optional) von Swift wird verwendet, um fehlende Werte zu behandeln. Optional bedeutet "Es gibt einen Wert, und er ist gleich x" oder "Es gibt keinen Wert."
Die Swift-Sprache definiert das Suffix ? als Kurzform für den benannten Typ Optional. Mit anderen Worten, die folgenden beiden Deklarationen sind äquivalent:
var optionalInteger: Int? var optionalInteger: Optional<Int>
In beiden Fällen ist die Variable optionalInteger ein optionaler Ganzzahltyp. Beachten Sie, dass zwischen dem Typ und?kein Leerzeichen steht.
Optional ist eine Enumeration mit zwei Fällen, None und Some(T), die verwendet wird, um einen Wert darzustellen, der existieren kann oder nicht. Jeder Typ kann explizit als optionaler Typ deklariert (oder implizit konvertiert) werden. Wenn Sie einen optionalen Typ deklarieren, stellen Sie sicher, dass Sie Klammern verwenden, um dem ?-Operator einen geeigneten Gültigkeitsbereich zu geben. Um beispielsweise ein optionales Integer-Array zu deklarieren, sollten Sie (Int[])? schreiben; das Schreiben von Int[]? verursacht einen Fehler.
Wenn Sie eine optionale Variable oder optionale Eigenschaft deklarieren, ohne einen Anfangswert anzugeben, ist ihr Wert standardmäßig nil.
Optionals entsprechen dem LogicValue-Protokoll, daher können sie in einem booleschen Kontext auftreten. In diesem Fall ist das Optional gleich true, wenn ein optionaler Typ T? einen beliebigen Wert vom Typ T enthält (d. h. sein Wert ist Optional.Some(T)); andernfalls ist es false.
Wenn eine Instanz eines optionalen Typs einen Wert enthält, können Sie den Postfix-Operator ! verwenden, um auf diesen Wert zuzugreifen, wie unten gezeigt:
optionalInteger = 42 optionalInteger! // 42
Die Verwendung des Operators ! zum Zugriff auf eine optionale Variable, deren Wert nil ist, verursacht einen Laufzeitfehler.
Sie können Optional Chaining und Optional Binding verwenden, um selektiv Operationen auf optionalen Ausdrücken auszuführen. Wenn der Wert nil ist, wird keine Operation ausgeführt, und es tritt kein Laufzeitfehler auf.
Sehen wir uns die folgenden Beispiele genauer an, um die Anwendung optionaler Typen in Swift zu verstehen:
import Cocoa
var myString:String? = nil
if myString != nil {
print(myString)
}else{
print("字符串为 nil")
}
Die Ausgabe des obigen Programms ist:
字符串为 nil
Optionale Typen ähneln dem nil-Wert von Zeigern in Objective-C, aber nil ist nur für Klassen nützlich, während optionale Typen für alle Typen verfügbar und sicherer sind.
Erzwungenes Entpacken
Wenn Sie sicher sind, dass der optionale Typ tatsächlich einen Wert enthält, können Sie nach dem Namen des Optionals ein Ausrufezeichen (!) hinzufügen, um auf den Wert zuzugreifen. Dieses Ausrufezeichen bedeutet: „Ich weiß, dass dieses Optional einen Wert hat, bitte verwende ihn.“ Dies wird als erzwungenes Entpacken eines optionalen Werts bezeichnet.
Beispiel unten:
import Cocoa
var myString:String?
myString = "Hello, Swift!"
if myString != nil {
print(myString)
}else{
print("myString 值为 nil")
}
Die Ausgabe des obigen Programms ist:
Optional("Hello, Swift!")
Erzwungenes Entpacken eines optionalen Werts mit dem Ausrufezeichen (!):
import Cocoa
var myString:String?
myString = "Hello, Swift!"
if myString != nil {
// 强制解析
print( myString! )
}else{
print("myString 值为 nil")
}
Die Ausgabe des obigen Programms ist:
Hello, Swift!
Hinweis:
Verwendung!auf einen nicht existierenden optionalen Wert zuzugreifen, verursacht einen Laufzeitfehler. Bei Verwendung!bevor Sie einen Wert erzwungen entpacken, stellen Sie sicher, dass das Optional einen Nicht-nilWert.
Automatisches Entpacken
Sie können beim Deklarieren einer optionalen Variablen ein Ausrufezeichen (!) anstelle eines Fragezeichens (?) verwenden. Auf diese Weise muss die optionale Variable bei der Verwendung kein Ausrufezeichen (!) hinzufügen, um auf den Wert zuzugreifen; sie wird automatisch entpackt.
Beispiel unten:
import Cocoa
var myString:String!
myString = "Hello, Swift!"
if myString != nil {
print(myString)
}else{
print("myString 值为 nil")
}
Die Ausgabe des obigen Programms ist:
Hello, Swift!
Optionales Binden
Verwenden Sie optionales Binden, um zu ermitteln, ob ein optionaler Typ einen Wert enthält. Wenn er einen Wert enthält, weisen Sie diesen Wert einer temporären Konstante oder Variablen zu. Optionales Binden kann in if- und while-Anweisungen verwendet werden, um den Wert eines optionalen Typs zu prüfen und den Wert einer Konstante oder Variablen zuzuweisen.
Schreiben Sie ein optionales Binden in einer if-Anweisung wie folgt:
if let constantName = someOptional {
statements
}
Sehen wir uns ein einfaches Beispiel für optionales Binden an:
import Cocoa
var myString:String?
myString = "Hello, Swift!"
if let yourString = myString {
print("你的字符串值为 - \(yourString)")
}else{
print("你的字符串没有值")
}
Die Ausgabe des obigen Programms ist:
你的字符串值为 - Hello, Swift!Andere Erweiterungen