在Swift 2中,`join`变成了`joinWithSeparator`,并且需要对数组调用该方法。
在`filter`中,应该在当前迭代项`$0`上调用`isEmpty`。
要将空格和换行符替换为问题中的唯一空格字符:
extension String {
func condenseWhitespace() -> String {
let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
return components.filter { !$0.isEmpty }.joinWithSeparator(" ")
}
}
let result = "Hello World.\nHello!".condenseWhitespace()
因为你的函数不需要任何参数,所以你可以将它改为属性:
extension String {
var condensedWhitespace: String {
let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
return components.filter { !$0.isEmpty }.joinWithSeparator(" ")
}
}
let result = "Hello World.\nHello!".condensedWhitespace
在 Swift 3 中有更多的变化。
函数:
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()
属性:
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
在Swift 4.2中,NSCharacterSet现在更名为CharacterSet,并且您可以省略并使用点语法:
extension String {
func condenseWhitespace() -> String {
let components = self.components(separatedBy: .whitespacesAndNewlines)
return components.filter { !$0.isEmpty }.joined(separator: " ")
}
}
let result = "Hello World.\nHello!".condenseWhitespace()
func condenseWhitespace() -> String { let components = self.components(separatedBy: .whitespaces) let tmpstr = components.filter { !$0.isEmpty }.joined(separator: " ") let components2 = tmpstr.components(separatedBy: .newlines) return components2.filter { !$0.isEmpty }.joined(separator: "\n") }
- Climbatize