这有效
let replaced = String(map(aString.generate()) {
$0 == " " ? "-" : $0 })
这不是
let replaced = String(map(aString.generate()) {
$0 == " " ? "" : $0 })
为什么?
答案 0 :(得分:11)
枚举一个字符串会给出一系列字符,所以$0
在里面
闭包的类型为Character
。这个编译
{ $0 == " " ? "-" : $0 }
因为此上下文中的"-"
被解释为字符文字
因此与$0
的类型相同。但是
{ $0 == " " ? "" : $0 }
无法编译,因为""
不是字符文字(并且在条件表达式a ? b : c
中操作数b
和c
必须具有相同的类型。)
您可以通过将$0
转换为字符串来解决此问题:
{ $0 == " " ? "" : String($0) }
但现在映射会返回一个字符串数组
一组字符。所以与其
您必须加入结果的String()
构造函数:
let replaced = "".join(map(aString) { $0 == " " ? "" : String($0) })
// Swift 2 / Xcode 7:
let replaced = "".join(aString.characters.map({ $0 == " " ? "" : String($0) }))
(请注意,不需要明确调用generate()
。)
当然,
也可以达到同样的效果let replaced = aString.stringByReplacingOccurrencesOfString(" ", withString: "")
答案 1 :(得分:5)
如果你想从字符串中删除空格,那么只需用stringByReplacingOccurrencesOfString函数传递字符串,如下所示,
let replacedString = string.stringByReplacingOccurrencesOfString(" ", withString: "")
对于文本字段,您可以直接应用UITextField的对象,
let replacedString = textField.text!.stringByReplacingOccurrencesOfString(" ", withString: "")
答案 2 :(得分:5)
这应该适用于Swift 2.2:
let replaced = String(aString.characters.filter {$0 != " "})
答案 3 :(得分:3)
您正在映射,因此应保留元素的数量。在第二种情况下,您删除元素。即使您将" "
替换为--
,您的示例也会失败。
您可能更喜欢使用filter
:
let replaced = String(filter(aString.generate()) { $0 != " "})
答案 4 :(得分:3)
如果要删除字符串前后的空格,这在用户输入表单中非常有用,可以使用:
let replaced = aString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
您也可以直接在文本字段中应用它。
答案 5 :(得分:3)
如果你想删除String
中任何地方的所有空格,我确实为 Swift 3.0 提出了这个解决方案:
let number = "+000 000 000"
let nonWhiteCharacters = number.unicodeScalars.filter {
false == NSCharacterSet.whitespacesAndNewlines.contains($0)
}.map(Character.init)
let whitespacelessNumber = String(nonWhiteCharacters)
甚至更好(您需要在序列上使用通用扩展名):
extension Sequence {
public func reduce<Result>(_ result: (Self) throws -> Result) rethrows -> Result {
return try result(self)
}
}
然后你可以写:
let whitespacelessNumber = number.unicodeScalars.filter {
false == NSCharacterSet.whitespacesAndNewlines.contains($0)
}.map(Character.init).reduce { String($0) }
您还可以将NSCharacterSet.whitespacesAndNewlines
替换为任何其他字符集:
NSCharacterSet.controlCharacters
NSCharacterSet.whitespaces
NSCharacterSet.whitespacesAndNewlines
NSCharacterSet.decimalDigits
NSCharacterSet.letters
NSCharacterSet.lowercaseLetters
NSCharacterSet.uppercaseLetters
NSCharacterSet.nonBaseCharacters
NSCharacterSet.alphanumerics
NSCharacterSet.decomposables
NSCharacterSet.illegalCharacters
NSCharacterSet.punctuationCharacters
NSCharacterSet.capitalizedLetters
NSCharacterSet.symbols
NSCharacterSet.newline
答案 6 :(得分:2)
试试这个:
let strArray0 = strArray1.map { $0.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet()) }
希望这有帮助
答案 7 :(得分:1)
在Swift 3.0 DO中作为
func RemoveWhiteSpace(aString:String) -> String
{
let replaced = aString.trimmingCharacters(in: NSCharacterSet.whitespaces)
return replaced
}
并像这样使用
let nonWhiteSpaceStr = self.RemoveWhiteSpace(aString: "I have white Space ")
答案 8 :(得分:0)
之前的答案中没有一个对我足够迅速,因此我最终使用了Swift 5:
let nonWhitespaceString = String(whitespaceString.compactMap({ $0.isWhitespace ? nil : $0 })
答案 9 :(得分:0)
对于 Swift 5 :
" spaces here ".replacingOccurrences(of: " ", with: "")
返回:
"spaceshere"