如何在Swift中删除字符串中的空格?

Kat*_* Zz 9 string whitespace swift

这有效

let replaced = String(map(aString.generate()) {
    $0 == " " ? "-" : $0 })
Run Code Online (Sandbox Code Playgroud)

而这不是

let replaced = String(map(aString.generate()) {
    $0 == " " ? "" : $0 })
Run Code Online (Sandbox Code Playgroud)

为什么?

Sha*_*yag 18

对于Swift 5

" spaces here ".replacingOccurrences(of: " ", with: "")
Run Code Online (Sandbox Code Playgroud)

返回:

"spaceshere"
Run Code Online (Sandbox Code Playgroud)


Mar*_*n R 12

枚举一个字符串给出了一系列字符,因此$0在闭包内部有类型Character.这编译

{ $0 == " " ? "-" : $0 }
Run Code Online (Sandbox Code Playgroud)

因为"-"在此上下文中被解释为字符文字,因此与...相同$0.但

{ $0 == " " ? "" : $0 }
Run Code Online (Sandbox Code Playgroud)

不编译,因为""字符文字(在条件表达式a ? b : c的操作数b,并c 必须具有相同的类型).

您可以通过转换$0为字符串来解决此问题:

{ $0 == " " ? "" : String($0) }
Run Code Online (Sandbox Code Playgroud)

但现在映射返回一个字符串数组而不是一个字符数组.因此,String()您必须加入结果而不是构造函数:

let replaced = "".join(map(aString) { $0 == " " ? "" : String($0) })
// Swift 2 / Xcode 7:
let replaced = "".join(aString.characters.map({ $0 == " " ? "" : String($0) }))
Run Code Online (Sandbox Code Playgroud)

(注意,generate()不需要显式调用.)

当然也可以实现相同的结果

let replaced = aString.stringByReplacingOccurrencesOfString(" ", withString: "")
Run Code Online (Sandbox Code Playgroud)


Hen*_*ijn 5

如果要删除字符串前后的空格,这在用户输入表单中非常有用,可以使用:

let replaced = aString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
Run Code Online (Sandbox Code Playgroud)

您也可以将其直接应用于文本字段。


iAn*_*kit 5

如果你想从字符串中删除空格,那么只需用stringByReplacingOccurrencesOfString函数传递字符串,如下所示,

let replacedString = string.stringByReplacingOccurrencesOfString(" ", withString: "")
Run Code Online (Sandbox Code Playgroud)

对于文本字段,您可以直接应用UITextField的对象,

let replacedString = textField.text!.stringByReplacingOccurrencesOfString(" ", withString: "")
Run Code Online (Sandbox Code Playgroud)


EFC*_*EFC 5

这应该适用于Swift 2.2:

let replaced = String(aString.characters.filter {$0 != " "})
Run Code Online (Sandbox Code Playgroud)


Mat*_*mbo 3

您正在映射,因此应保留元素的数量。在第二种情况下,您删除元素。即使您替换为 ,您的示例也会" "失败--

您可能更喜欢使用filter

let replaced = String(filter(aString.generate()) { $0 != " "})
Run Code Online (Sandbox Code Playgroud)