enumerazione di una stringa dà una sequenza di caratteri , così $0
all'interno la chiusura ha il tipo Character
. Questo compila
{ $0 == " " ? "-" : $0 }
perché "-"
in questo contesto viene interpretato come un carattere letterale e quindi dello stesso tipo come $0
. Ma
{ $0 == " " ? "" : $0 }
non compila perché ""
è non un carattere letterale (e nell'espressione condizionale a ? b : c
operandi b
e c
devono avere lo stesso tipo).
si può risolvere che convertendo $0
in una stringa:
{ $0 == " " ? "" : String($0) }
ma ora la mappatura restituisce un array di stringhe, invece di un array di caratteri. Così, invece del String()
costruttore si deve unirsi i risultati:
let replaced = "".join(map(aString) { $0 == " " ? "" : String($0) })
// Swift 2/Xcode 7:
let replaced = "".join(aString.characters.map({ $0 == " " ? "" : String($0) }))
(Si noti che chiama generate()
esplicitamente non è necessario.)
Naturalmente lo stesso risultato sarebbe essere ottenuta anche con
let replaced = aString.stringByReplacingOccurrencesOfString(" ", withString: "")
fonte
2015-02-16 19:49:44