2015-10-10 18 views
10

Do Swift 2 Użyłem tego rozszerzenia, aby usunąć wiele spacje:Jak usunąć wiele miejsc w ciągach z Swift 2

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

ale Swift 2 teraz pojawia się błąd

nie może powoływać ' isEmpty 'z listą argumentów typu' (String) '

Jak mogę teraz usunąć wiele spacji za pomocą Swift 2? Thnx!

Odpowiedz

25

W Swift 2, join stał się joinWithSeparator i wywołuje się go w tablicy.

W filter, isEmpty należy wywołać na bieżącym numerze iteracji $0.

Aby zastąpić spacje i znaki nowej linii z niepowtarzalnych postaci kosmicznych jak w pytaniu:

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!" 

Ponieważ funkcja nie przyjmuje żadnych parametrów można dokonać jej własność w zamian:

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!" 

W Swift 3 jest jeszcze więcej zmian.

Funkcja:

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() 

Własność:

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

pracuje dla mnie :) dzięki –

3

SWIFT 3: Cleaner wersja

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