Swift Language
Conditionals
Suche…
Einführung
Bedingte Ausdrücke mit Schlüsselwörtern wie if, else if und else ermöglichen es Swift-Programmen, abhängig von einer booleschen Bedingung verschiedene Aktionen auszuführen: True oder False. In diesem Abschnitt wird die Verwendung von Swift-Bedingungen, Booleschen Logik und ternären Anweisungen beschrieben.
Bemerkungen
Weitere Informationen zu Bedingungsanweisungen finden Sie unter Die Programmiersprache Swift .
Guard verwenden
Der Guard prüft, ob eine Bedingung vorliegt, und wenn sie falsch ist, tritt sie in den Zweig ein. Guard-Check-Zweige müssen ihren Umschließungsblock entweder durch return
, break
oder continue
(falls zutreffend) verlassen; Andernfalls führt dies zu einem Compiler-Fehler. Dies hat den Vorteil, dass es beim Schreiben einer guard
nicht möglich ist, den Fluss unbeabsichtigt weiterlaufen zu lassen (wie dies bei einem if
möglich if
).
Durch die Verwendung von Wachen können die Verschachtelungsstufen niedrig gehalten werden , was in der Regel die Lesbarkeit des Codes verbessert.
func printNum(num: Int) {
guard num == 10 else {
print("num is not 10")
return
}
print("num is 10")
}
Der Guard kann auch prüfen, ob ein optionaler Wert vorhanden ist, und ihn dann im äußeren Bereich auspacken:
func printOptionalNum(num: Int?) {
guard let unwrappedNum = num else {
print("num does not exist")
return
}
print(unwrappedNum)
}
Guard kann kombinieren optional Abwickeln und Zustandsüberprüfung mit where
Stichwort:
func printOptionalNum(num: Int?) {
guard let unwrappedNum = num, unwrappedNum == 10 else {
print("num does not exist or is not 10")
return
}
print(unwrappedNum)
}
Grundlegende Bedingungen: If-Anweisungen
Ein , if
Anweisung prüft , ob eine Bool Bedingung ist true
:
let num = 10
if num == 10 {
// Code inside this block only executes if the condition was true.
print("num is 10")
}
let condition = num == 10 // condition's type is Bool
if condition {
print("num is 10")
}
if
Anweisungen akzeptieren else if
und else
Blöcke, die alternative Bedingungen testen und einen Fallback bereitstellen können:
let num = 10
if num < 10 { // Execute the following code if the first condition is true.
print("num is less than 10")
} else if num == 10 { // Or, if not, check the next condition...
print("num is 10")
} else { // If all else fails...
print("all other conditions were false, so num is greater than 10")
}
Grundoperatoren wie &&
und ||
kann für mehrere Bedingungen verwendet werden:
Der logische AND-Operator
let num = 10
let str = "Hi"
if num == 10 && str == "Hi" {
print("num is 10, AND str is \"Hi\"")
}
Wenn num == 10
falsch ist, wird der zweite Wert nicht ausgewertet. Dies wird als Kurzschlussauswertung bezeichnet.
Der logische ODER-Operator
if num == 10 || str == "Hi" {
print("num is 10, or str is \"Hi\")
}
Wenn num == 10
wahr ist, wird der zweite Wert nicht ausgewertet.
Der logische NOT-Operator
if !str.isEmpty {
print("str is not empty")
}
Optionale Bindungs- und "Wo" -Klauseln
Optionals müssen entpackt werden, bevor sie in den meisten Ausdrücken verwendet werden können. if let
eine optionale Bindung ist , die erfolgreich ist, wenn der optionale Wert nicht nil
:
let num: Int? = 10 // or: let num: Int? = nil
if let unwrappedNum = num {
// num has type Int?; unwrappedNum has type Int
print("num was not nil: \(unwrappedNum + 1)")
} else {
print("num was nil")
}
Sie können denselben Namen für die neu gebundene Variable wiederverwenden, wobei das Original gespiegelt wird:
// num originally has type Int?
if let num = num {
// num has type Int inside this block
}
Kombinieren Sie mehrere optionale Bindungen mit Kommas ( ,
):
if let unwrappedNum = num, let unwrappedStr = str {
// Do something with unwrappedNum & unwrappedStr
} else if let unwrappedNum = num {
// Do something with unwrappedNum
} else {
// num was nil
}
Wenden Sie nach der optionalen Bindung weitere Einschränkungen mit einer where
Klausel an:
if let unwrappedNum = num where unwrappedNum % 2 == 0 {
print("num is non-nil, and it's an even number")
}
Wenn Sie abenteuerlustig sind, verschachteln Sie eine beliebige Anzahl optionaler Bindungen und where
Klauseln:
if let num = num // num must be non-nil
where num % 2 == 1, // num must be odd
let str = str, // str must be non-nil
let firstChar = str.characters.first // str must also be non-empty
where firstChar != "x" // the first character must not be "x"
{
// all bindings & conditions succeeded!
}
In Swift 3, where
Klauseln ersetzt wurden ( SE-0099 ): Verwenden Sie einfach eine andere ,
um optionale Bindungen und boolesche Bedingungen zu trennen.
if let unwrappedNum = num, unwrappedNum % 2 == 0 {
print("num is non-nil, and it's an even number")
}
if let num = num, // num must be non-nil
num % 2 == 1, // num must be odd
let str = str, // str must be non-nil
let firstChar = str.characters.first, // str must also be non-empty
firstChar != "x" // the first character must not be "x"
{
// all bindings & conditions succeeded!
}
Ternärer Operator
Die Bedingungen können auch in einer Zeile mit dem ternären Operator ausgewertet werden:
Wenn Sie das Minimum und Maximum von zwei Variablen ermitteln möchten, können Sie if -Anweisungen verwenden:
let a = 5
let b = 10
let min: Int
if a < b {
min = a
} else {
min = b
}
let max: Int
if a > b {
max = a
} else {
max = b
}
Der ternäre bedingte Operator nimmt eine Bedingung an und gibt einen von zwei Werten zurück, je nachdem, ob die Bedingung wahr oder falsch war. Die Syntax lautet wie folgt: Dies entspricht dem Ausdruck:
(<CONDITION>) ? <TRUE VALUE> : <FALSE VALUE>
Der obige Code kann mit einem ternären bedingten Operator wie folgt umgeschrieben werden:
let a = 5
let b = 10
let min = a < b ? a : b
let max = a > b ? a : b
Im ersten Beispiel ist die Bedingung a <b. Ist dies der Fall, wird das Ergebnis, das min zugewiesen wurde, von a sein; Wenn es falsch ist, ist das Ergebnis der Wert von b.
Hinweis: Da das Finden der größeren oder kleineren von zwei Zahlen eine solche häufige Operation ist, bietet die Swift-Standardbibliothek zwei Funktionen für diesen Zweck: max und min.
Kein Koaleszenzoperator
Der Null-Koaleszenz-Operator <OPTIONAL> ?? <DEFAULT VALUE>
entpackt das <OPTIONAL>
wenn es einen Wert enthält, oder gibt <DEFAULT VALUE>
wenn es null ist. <OPTIONAL>
ist immer ein optionaler Typ. <DEFAULT VALUE>
muss dem Typ entsprechen, der in <OPTIONAL>
gespeichert ist.
Der nullkoaleszierende Operator ist eine Abkürzung für den folgenden Code, der einen ternären Operator verwendet:
a != nil ? a! : b
Dies kann durch den folgenden Code überprüft werden:
(a ?? b) == (a != nil ? a! : b) // ouputs true
Zeit für ein Beispiel
let defaultSpeed:String = "Slow"
var userEnteredSpeed:String? = nil
print(userEnteredSpeed ?? defaultSpeed) // ouputs "Slow"
userEnteredSpeed = "Fast"
print(userEnteredSpeed ?? defaultSpeed) // ouputs "Fast"
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow