2016-08-04 37 views
48

Die Swift-Dokumentation auf Seite 61 des Swift-Handbuchs weist auf die Möglichkeit hin, where zu verwenden, um einer optionalen Bindung mit einer regulären Bedingung beizutreten. Doch wenn ich es tun habe ich eine Warnung darauf hindeutet, mir die where mit einem Komma wie in dem folgenden Code zu ersetzen:Verwendung von where in if let-Zuweisung in Swift

if let geocodingError = error as? NSError where geocodingError.code == 2 

Antwort

115

In Swift 3 diese Syntax geändert hat.

Was war

if let x = y, a = b where a == x {

ist jetzt

if let x = y, let a = b, a == x {

Die Begründung ist, dass jeder Unterabschnitt des if ... { ist nun ein unabhängiger boolean Test.

Weitere Informationen zu dieser Änderung finden Sie unter Xcode Release notes & Swift Evolution proposal.

+4

Noch eine weitere Veränderung. Überall in der Dokumentation ist die where-Klausel noch vorhanden. Wie auch immer, die Verwendung des von Ihnen vorgeschlagenen Formulars funktioniert einwandfrei. –

+0

Wird diese Änderung an anderer Stelle als in den (nicht vollständig veröffentlichten) Xcode 8 Beta 4-Versionshinweisen beschrieben? Z.B. Evolution/andere offizielle Dokumente? Ich möchte andere Leser darauf hinweisen, dass wir immer noch aufgefordert werden, die 'where'-Klausel zu verwenden, um die variable Bindung von der Bedingung zu trennen, wenn z. Swift 3.0-Entwickler in der IBM Sandbox. – dfri

+0

Die auf Swift 3 aktualisierte Dokumentation hat immer noch die Online-Version. Zu sagen, dass das verwirrend ist, ist eine Untertreibung. Es sieht so aus, als würden sie die Dinge nur um ihrer selbst willen ändern, wie bei der DispatchQueue, die jetzt Deadline statt wann benötigt. –

2

Beispiel mit zwei Bedingungen

if let x = y, let a = b, a == x && !x.isEmpty { 
3

in Xcode 9

if let str = textField.text as String!, !str.isEmpty 
{ 
    params[key] = str 
    TextFieldHelper.setup(textField: textField) 
} 
else 
{ 
    TextFieldHelper.error(textField: textField) 
}