背景:我来自 15-20 年的 JavaScript、Ruby 和(现代)PHP。去年我一直在研究 Swift,而且我对 Cocoa 是全新的。
这是我在 Xcode 7.0 β2 中运行的简化测试用例:
#! /usr/bin/env swift
import Foundation
// Extend the String object with helpers
extension String {
// String.replace(); similar to JavaScript's String.replace() and Ruby's String.gsub()
func replace(pattern: String, replacement: String) -> String {
// Debugging
print(self.characters.count)
print(NSMakeRange(0, self.characters.count - 1))
let regex = try! NSRegularExpression(
pattern: pattern,
options: [.CaseInsensitive]
)
return regex.stringByReplacingMatchesInString(
replacement,
options: [.Anchored],
range: NSMakeRange(0, self.characters.count - 1),
withTemplate: "xx"
)
}
}
let prefix = "abc 123".replace("\\s+", replacement: " ")
print(prefix)
两条调试线显示:
11
(0,10)
之后,应用程序崩溃并显示以下消息:
2015-06-24 23:18:45.027 swift[42912:648900] *** 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“***-[NSRegularExpression enumerateMatchesInString:options:range:usingBlock:]: Range or索引超出范围'
我查看了以下文档,但没有任何东西跳出来给我:
我只能认为这个问题与将NSRange
实例作为参数传递给stringByReplacingMatchesInString()
方法有关,但我尝试将值调整为NSRange(0,1)
并NSRange(1,2)
期望看到有帮助的东西,但它仍然抛出异常。
正如我在标题中所写,我正在使用Swift 2.0。