我不知道是不是因为你有一个 NSString 并且 replace 方法返回一个 String (也许它使 String 和 NSString 之间的桥接有点混乱?),但你可以通过以下方式完成这项工作:
let datastring = "Hello,, Hello,,,"
let data = datastring.dataUsingEncoding(NSUTF8StringEncoding)
var str = NSString(data: data!, encoding: NSUTF8StringEncoding) as! String
while str.rangeOfString(",,") != nil
{
str = str.stringByReplacingOccurrencesOfString(",,", withString: ",")
}
str // Hello, Hello,
这确保我们牢牢地在 String 领域,并且只使用 String 方法而不是 NSString 方法。
如果您想继续使用 NSString,以下方法也可以:
let datastring = "Hello,,,,,, Hello,,,,,,,"
let data = datastring.dataUsingEncoding(NSUTF8StringEncoding)
var str:NSString = NSString(data: data!, encoding: NSUTF8StringEncoding)!
while str.containsString(",,") {
str = str.stringByReplacingOccurrencesOfString(",,", withString: ",")
}
str // "Hello, Hello,"
这意味着您完全摆脱了可选项,这是 NSString 初始化程序返回的内容,但是如果您搜索 StackOverflow,则会出现有关 containsString 不在文档中并且直到 iOS8 才包含在内的警告(这似乎是confirmed here),即不是使用 iOS7。我没有对此进行深入研究,但如果您支持 iOS7,则值得探索。
注意:为简洁起见,我只使用了强制转换为 String(以及强制解包数据),IRL 你会测试这些以确保两者都没有返回 nil。