Как удалить несколько пробелов в строках с помощью Swift 2
до Swift 2 я использовал это расширение для удаления нескольких пробелов:
func condenseWhitespace() -> String {
let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).filter({!Swift.isEmpty()})
return " ".join(components)
}
но с Swift 2 теперь я получаю ошибку
Не удается вызвать 'isEmpty' со списком аргументов типа'(String)'
Как теперь удалить несколько пробелов с помощью Swift 2? Thnx!
2 ответов
на Swift 2, join
стало joinWithSeparator
и вы вызываете его в массиве.
на filter
, isEmpty
должен вызываться на текущем элементе итерации .
чтобы заменить пробелы и символы новой строки уникальными символами пробела, как в вашем вопросе:
extension String {
func condenseWhitespace() -> String {
let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
return components.filter { !.isEmpty }.joinWithSeparator(" ")
}
}
let result = "Hello World.\nHello!".condenseWhitespace() // "Hello World. Hello!"
поскольку ваша функция не принимает никаких параметров, вы можете сделать ее свойством:
extension String {
var condensedWhitespace: String {
let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
return components.filter { !.isEmpty }.joinWithSeparator(" ")
}
}
let result = "Hello World.\nHello!".condensedWhitespace // "Hello World. Hello!"
на Swift 3 еще больше изменений.
функция:
extension String {
func condenseWhitespace() -> String {
let components = self.components(separatedBy: NSCharacterSet.whitespacesAndNewlines)
return components.filter { !.isEmpty }.joined(separator: " ")
}
}
let result = "Hello World.\nHello!".condenseWhitespace()
свойства:
extension String {
var condensedWhitespace: String {
let components = self.components(separatedBy: NSCharacterSet.whitespacesAndNewlines)
return components.filter { !.isEmpty }.joined(separator: " ")
}
}
let result = "Hello World.\nHello!".condensedWhitespace
на Swift 4.2 NSCharacterSet теперь набор символов, и вы можете опустить и использовать синтаксис точки:
extension String {
func condenseWhitespace() -> String {
let components = self.components(separatedBy: .whitespacesAndNewlines)
return components.filter { !.isEmpty }.joined(separator: " ")
}
}
let result = "Hello World.\nHello!".condenseWhitespace() // "Hello World. Hello!"
SWIFT 3: более чистая версия
extension String {
var condensedWhitespace: String {
let components = self.components(separatedBy: .whitespacesAndNewlines)
return components.filter { !.isEmpty }.joined(separator: " ")
}
}