2015-02-25 19 views
11

Nach der neuesten Aktualisierung von Swift 1.2, kann ich nicht herausfinden, wie man eine Zeile Text in Wörter aufteilen. Früher habe ich dies zu tun:Split jetzt beschwert sich über fehlende "isSeparator"

let bits = split(value!, { $0 == " "}, maxSplit: Int.max, allowEmptySlices: false) 

Aber das funktioniert nicht mehr, weil ...

Cannot invoke 'split' with an argument list of type '(String, (_) -> _, maxSplit: Int, allowEmptySlices: Bool)' 

Ähm, ok, obwohl ich bauen dauern könnte? Nun, was auch immer, lassen Sie uns versuchen ...

let bits = split(value!, { $0 == " "}) 

Nun, und jede andere Version, die ich von Enden nach oben denken kann sagen:

Missing argument for parameter 'isSeparator' in call 

Hören wir es für Beta-Testen neuer Programmiersprachen! Yay!

Wer kennt die richtige geheime Soße für 1.2?

Antwort

16

Es scheint, dass die Reihenfolge der Parameter in Swift geändert 1.2:

let bits = split(value!, maxSplit: Int.max, allowEmptySlices: false, 
       isSeparator: { $0 == " "}) 

oder die Standardwerte verwenden:

let bits = split(value!, isSeparator: { $0 == " "}) 

Das Prädikat nun der letzte Parameter ist und benötigt eine externe Parametername isSeparator, weil ihm optionale Parameter vorangestellt sind.

Der Vorteil dieser Änderung ist, dass Sie die hinteren Verschluss Syntax verwenden:

let bits = split(value!, maxSplit: Int.max, allowEmptySlices: false) { $0 == " " } 

oder

let bits = split(value!) { $0 == " " } 
+0

LOLZ. Danke, Apple. Und nicht sarkastisch dank Martin, das behebt tatsächlich das Problem. –

+0

Ja, danke Apple. Es ist möglich, dass die Änderung in der Split-Funktion einen besonders bösen Fehler verursacht hat, den ich bei einem Build im Release-Modus hatte (siehe meine Antwort hier: http://stackoverflow.com/questions/29107277/swift-release-build-crashes-unless-i- Abschaltoptimierung/32361548 # 32361548). –

Verwandte Themen