2015-02-16 2 views

risposta

3

Si sta mappando quindi il numero di elementi da conservare. Nel secondo caso si rimuovere gli elementi. Il tuo esempio fallirà anche nel caso in cui tu sostituisca " " con --.

Si potrebbe preferire usando filter:

let replaced = String(filter(aString.generate()) { $0 != " "}) 
11

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: "") 
3

Se si desidera eliminare gli spazi bianchi prima e dopo una stringa, che è molto utile nei moduli di input utente, è possibile utilizzare:

let replaced = aString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) 

È possibile applicarlo direttamente anche su un campo di testo.

2

provare questo:

let strArray0 = strArray1.map { $0.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet()) } 

Spero che questo aiuti

5

Se si desidera rimuovere lo spazio bianco da stringa poi basta passare stringa con la funzione stringByReplacingOccurrencesOfString come qui di seguito,

let replacedString = string.stringByReplacingOccurrencesOfString(" ", withString: "") 

Per Testo Campi, è possibile applicare direttamente l'oggetto di UITextField,

let replacedString = textField.text!.stringByReplacingOccurrencesOfString(" ", withString: "") 
5

Questo dovrebbe funzionare come di Swift 2.2:

let replaced = String(aString.characters.filter {$0 != " "}) 
1

In Swift 3.0 fare come

func RemoveWhiteSpace(aString:String) -> String 
    { 
     let replaced = aString.trimmingCharacters(in: NSCharacterSet.whitespaces) 
     return replaced 
    } 

e utilizzare come questo

let nonWhiteSpaceStr = self.RemoveWhiteSpace(aString: "I have white Space  ") 
1

Se si desidera rimuovere tutti gli spazi bianchi ovunque nel String ho trovato questa soluzione per Swift 3.0:

let number = "+000 000 000" 
let nonWhiteCharacters = number.unicodeScalars.filter { 
    false == NSCharacterSet.whitespacesAndNewlines.contains($0) 
}.map(Character.init) 
let whitespacelessNumber = String(nonWhiteCharacters) 

o meglio ancora (sarà necessario l'estensione generica su Sequence):

extension Sequence { 
    public func reduce<Result>(_ result: (Self) throws -> Result) rethrows -> Result { 
     return try result(self) 
    } 
} 

e quindi si può scrivere:

let whitespacelessNumber = number.unicodeScalars.filter { 
    false == NSCharacterSet.whitespacesAndNewlines.contains($0) 
}.map(Character.init).reduce { String($0) } 

dove è anche possibile sostituire NSCharacterSet.whitespacesAndNewlines per una qualsiasi delle altre set di caratteri:

NSCharacterSet.controlCharacters 
NSCharacterSet.whitespaces 
NSCharacterSet.whitespacesAndNewlines 
NSCharacterSet.decimalDigits 
NSCharacterSet.letters 
NSCharacterSet.lowercaseLetters 
NSCharacterSet.uppercaseLetters 
NSCharacterSet.nonBaseCharacters 
NSCharacterSet.alphanumerics 
NSCharacterSet.decomposables 
NSCharacterSet.illegalCharacters 
NSCharacterSet.punctuationCharacters 
NSCharacterSet.capitalizedLetters 
NSCharacterSet.symbols 
NSCharacterSet.newline