Suche nach einem Doc-Verweis oder einem Namen oder einer Verknüpfung zu diesem bestimmten Verhalten, die der optionalen Bindung ähnelt, aber in diesem Teil der Dokumentation nicht behandelt wird.Swift Optionale und Gleichheitsoperator
ich einen optional mit dem ==
Operator testen kann, und Test sowohl gegen nil
und seinen tatsächlichen Wert, ohne ein explizites Abwickeln zu tun:
var toggle: Bool? = nil
if (toggle == true || toggle == nil) {
// do something
}
Dies kompiliert und funktioniert, wie Sie es wollen würden, aber Was hier passiert ist, dass ich toggle!
nicht explizit auspacken musste; die ==
hat es sicher für mich gemacht.
Es ist bequem, aber ich gestehe, ein wenig überrascht zu sein, als ich es bemerkte. Ist das nur ein Verhalten der Standard-Implementierung ==
? Oder ist etwas anderes in der Sprache hier passiert? Danke für die Einsicht.
Wenn Sie auf das '==' klicken, dann sehen Sie, dass es ein 'public func == (lhs: T ?, rechts: T?) -> Bool 'gibt, das zwei Optionals als akzeptiert Operanden. –
In der Tat, aber warum sollte es? Ist das philosophisch im Sprachdesign? Oder nur eine Bequemlichkeit? Oder denke ich zu viel darüber nach? –
Es ist Bequemlichkeit, denke ich. Die Vergleichsoperatoren, die Optionals verwenden, wurden in Swift 3 entfernt: https://github.com/apple/swift-evolution/blob/master/proposals/0121-remove-optional-comparison-operators.md. Aber die Gleichheitsoperatoren blieben: * "Varianten von == und! =, Die optionale Operanden akzeptieren, sind immer noch nützlich, und ihre Ergebnisse sind nicht überraschend, also werden sie bleiben." * –