2015-10-10 7 views
10

Bis Swift 2 ich diese Erweiterung verwendet entfernen mehrere Leerzeichen zu entfernen:Wie mehrere Leerzeichen in Strings mit Swift 2

func condenseWhitespace() -> String { 
     let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).filter({!Swift.isEmpty($0)}) 
     return " ".join(components) 
} 

aber mit Swift 2 jetzt erhalte ich die Fehler

Kann nicht aufrufen " isEmpty 'mit einer Argumentliste vom Typ' (String) '

Wie könnte ich jetzt mehrere Bereiche mit Swift 2 entfernen? Thnx!

Antwort

25

In Swift 2, join ist joinWithSeparator geworden und Sie rufen es auf dem Array.

In filter, isEmpty sollte der aktuelle Iterationspunkt $0 aufgerufen werden.

So ersetzen Sie Leerzeichen und Zeilenumbrüche mit einzigartigen Raumzeichen wie in Ihrer Frage:

extension String { 
    func condenseWhitespace() -> String { 
     let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) 
     return components.filter { !$0.isEmpty }.joinWithSeparator(" ") 
    } 
} 

let result = "Hello World.\nHello!".condenseWhitespace() // "Hello World. Hello!" 

Weil Ihre Funktion keine Parameter nimmt Sie es eine Eigenschaft machen könnte stattdessen:

extension String { 
    var condensedWhitespace: String { 
     let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) 
     return components.filter { !$0.isEmpty }.joinWithSeparator(" ") 
    } 
} 

let result = "Hello World.\nHello!".condensedWhitespace // "Hello World. Hello!" 

In Swift 3 gibt es noch mehr Änderungen.

Funktion:

extension String { 
    func condenseWhitespace() -> String { 
     let components = self.components(separatedBy: NSCharacterSet.whitespacesAndNewlines) 
     return components.filter { !$0.isEmpty }.joined(separator: " ") 
    } 
} 

let result = "Hello World.\nHello!".condenseWhitespace() 

Eigentum:

extension String { 
    var condensedWhitespace: String { 
     let components = self.components(separatedBy: NSCharacterSet.whitespacesAndNewlines) 
     return components.filter { !$0.isEmpty }.joined(separator: " ") 
    } 
} 

let result = "Hello World.\nHello!".condensedWhitespace 
+0

Werke für mich :) Dank –

3

SWIFT 3: Reiniger Version

extension String { 
    var condensedWhitespace: String { 
     let components = self.components(separatedBy: .whitespacesAndNewlines) 
     return components.filter { !$0.isEmpty }.joined(separator: " ") 
    } 
} 
Verwandte Themen