Как удалить несколько пробелов в строках с помощью 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: " ")
    }
}