2015-02-25 16 views
11

Po ostatniej aktualizacji Swift 1.2, nie mogę zrozumieć, jak podzielić linię tekstu na słowa. Kiedyś to zrobić:split teraz narzeka na brakujący "isSeparator"

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

ale to już nie działa, ponieważ ...

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

Hmmm, ok, chociaż może trwać budować? No co, spróbujmy ...

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

dobrze, że i każda inna wersja mogę myśleć kończy się słowami:

Missing argument for parameter 'isSeparator' in call 

Posłuchajmy go do nowych języków programowania beta-testów! Yay!

Ktoś zna prawidłowy sekretny sos dla 1,2?

Odpowiedz

16

Wydaje się, że kolejność parametrów zmieniło w Swift 1.2:

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

lub przy użyciu wartości domyślnych:

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

Predykat jest teraz ostatni parametr i wymaga zewnętrznego nazwa parametru isSeparator ponieważ jest poprzedzona opcjonalnymi parametrami.

Zaletą tej zmiany jest to, że można użyć tyłu zamknięcia składni:

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

lub

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

lolz. Dzięki Apple. I nie sarkastyczne dzięki Martinowi, to naprawia problem. –

+0

Tak, dziękuję Apple. Możliwe, że zmiana funkcji podziału spowodowała szczególnie nieprzyjemny błąd, którego doświadczyłem podczas kompilacji w trybie wydania (zobacz moją odpowiedź tutaj: http://stackoverflow.com/questions/29107277/swift-release-build-crashes-unless-i- wyłączenie-optymalizacja/32361548 # 32361548). –