
Wechselnde Änderungen
Wenn wir alle umgesetzten Swift 4 Vorschläge zusammenfassen würden, kämen wir (Stand 31.5.17) auf die folgende Liste.

Unterscheidung zwischen Funktionstypen mit einem Tupel und mehreren Argumenten "Š-"Š(SE-0110)
Mit diesem Vorschlag müssen Sie nun Tupel aus dem nun einzigen Parameter manuell erweitern. Lassen Sie es uns anhand eines Beispiels erklären.
typealias Name = (vorname: String, nachname: String)
let names: [Name] = [("Bart", "den Holländer")]
// Swift 3
names.forEach({ first, last in
print(last) // "den Holländer"
})
Die Variablen 'first' und 'last' werden vom Swift 3 Compiler aus dem Tupel erweitert. Das ist sehr hilfreich und lesbar. Lassen Sie uns nun dasselbe in Swift 4 tun.
// Swift 4
names.forEach({ first, last in
print(last)
})
// Fehler: Closure-Tupel-Parameter '(vorname: String, nachname: String)' unterstützt keine Destrukturierung
Der Grund dafür, dass dies nicht mehr funktioniert, ist, dass Sie in Swift 4 Tupel manuell aus einem einzelnen Parameter erweitern müssen. Sie können dies folgendermaßen beheben.
// Swift 4
A: Erweitern Sie durch Angabe des Tupelschlüssels
names.forEach({ name in
print(name.lastName) // "den Holländer"
})
B: Erweitern durch Angabe der Anzahl der Tupel-Elemente in einer Variablen
names.forEach({ name in
let (Vorname, Nachname) = Name
print(last) // "den Holländer"
})
C: Wechsel zu einer for-Schleife
for (vor, nach) in Namen {
print(last) // "den Holländer"
}
Dennoch wird die Frage aufgeworfen, warum diese Änderung eingeführt wurde. Diese Frage wird von Joe Groff, Swift Compiler Engineer bei Apple, beantwortet.
https://twitter.com/jckarter/status/867750246935216128
Ich denke, dass diese Änderung zwar zu einer besseren Leistung des Typprüfers führt, aber auch zu einer schlechteren Lesbarkeit der Syntax.





