我正在将基于CoreText的应用程序转换为Swift,并且在将匹配项添加到文本中的正则表达式时遇到了问题。
这是示例代码
let regexOptions = NSRegularExpressionOptions.CaseInsensitive | NSRegularExpressionOptions.DotMatchesLineSeparators
let regex = NSRegularExpression.regularExpressionWithPattern("(.*?)(<[^>]+>|\\Z)", options: regexOptions, error: nil)
var results: Array<NSTextCheckingResult> = regex.matchesInString(text, options: 0, range: NSMakeRange(0, countElements(text)))
根据文档,matchesInString
函数返回一个NSTextCheckingResults
数组,但编译器抱怨声明“类型anyObject []的表达式无法转换为”{{1}对这里可能有什么不妥的想法?
答案 0 :(得分:7)
尝试像这样分配results
变量:
var results = regex.matchesInString(text, options: nil, range: NSMakeRange(0, countElements(text))) as Array<NSTextCheckingResult>
返回类型为Array<AnyObject>[]!
,您可以在此处投放(如上例所示)或稍后检查集合成员时
在Swift选项中,nil
代表一个空的选项集(与Objective-C中的0
对比)
答案 1 :(得分:0)
我只是遇到了与某些正则表达式相关的问题,并且认为我会在上面提交的答案中添加警告。我的正则表达式匹配似乎被缩短了,结果证明我提供的范围不正确。我以@fqdn描述的方式生成了范围。事实证明,我的字符串包含回车符(\ u {A}),并且countElements函数不计算这些回车符。 我通过在字符串上调用.unicodeScalars来反击这一点,这似乎纠正了长度。
println(countElements("\u{A}\u{A}\u{A}\n\u{D}\n\u{D}\n\u{D}\n\u{D}\n")) //8
println(countElements("\u{A}\u{A}\u{A}\n\u{D}\n\u{D}\n\u{D}\n\u{D}\n".unicodeScalars)) //12
免责声明:这很可能是一个快速错误,可能会在以后的版本中修复。