Swift switch-Anweisung auf ein Tupel der optionale Boolesche Werte
Ich habe Schwierigkeiten, herauszufinden, wie man Optionen innerhalb eines Tupels innerhalb einer switch. Der unten .Einige(lassen ...) ... - syntax arbeitet als non-Tupel, aber in einem Tupel ich erwarten separator Sachen 🙁
var dict = Dictionary<String,Bool>()
dict["a"] = true
switch (dict["a"],dict["b") {
case (.Some(let a) where !a, .Some(let b) where b):
println("false/nil, true")
case (.Some(let a) where a, .Some(let b) where !b):
println("true, false/nil")
Möchte ich vermeiden, tun Sie den folgenden
if let a = self.beaconList["a"] {
if let b = self.beaconList["b"] {
//a, b
} else {
//a, !b
}
} else {
if let b = self.beaconList["b"] {
//!a, b
} else {
//!a, !b
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine Reihe von Möglichkeiten, dies zu tun, aber fix die syntax von dem, was Sie zu tun versuchen buchstäblich, müssen Sie explizit unbox die Optionale, entweder indem ein Abgleich mit .Einige(false), oder unwrapping es mit ! (ich denke, das ist Art von seltsam, wie Sie sehen werden)
Könnte man auch versuchen, die folgenden:
Hier ist eine Zusammenfassung von dem Spielplatz, die ich verwendet, beim schreiben dieser Antwort: https://gist.github.com/bgrace/b8928792760159ca58a1
!b!
grossness, indem Sie sowohl diea
&b
args implizit unwrapped optionals mitmatchOneOrTheOtherWithOptionals(a: Bool!, b: Bool!)
. Dann ist dein Fallwhere
s werden nurwhere b == .none || !b:
&where a == .none || !a:
. Dies ist ganz sicher hier, weil Sie explizit die überprüfung sowohla
&b
für.none
vor der Verwendung des umschlossenen booleschen Wert.Vereinfachen!