Isu*_*uru 9 string range ios nsrange swift
给定a的下面的函数NSString从该字符串中删除HTML标记并将结果也作为a返回NSString.
private func removeHTMLTags(source: NSString) -> NSString {
var range = NSMakeRange(0, 0)
let HTMLTags = "<[^>]*>"
var sourceString = source
while sourceString.rangeOfString(HTMLTags, options: NSStringCompareOptions.RegularExpressionSearch).location != NSNotFound {
range = sourceString.rangeOfString(HTMLTags, options: NSStringCompareOptions.RegularExpressionSearch)
sourceString = sourceString.stringByReplacingCharactersInRange(range, withString: "")
}
return sourceString;
}
Run Code Online (Sandbox Code Playgroud)
我试图用纯粹的Swift重写它.我Range在Swift中面临类型问题.
在原始代码函数中,range变量声明为type NSRange.在我的版本中,我不能这样做,因为sourceString.rangeOfString(HTMLTags, options: NSStringCompareOptions.RegularExpressionSearch)while循环中的行返回类型Range<String.Index>,它会给我错误无法将表达式的类型'()'转换为'NSRange'类型.
所以我声明了这个变量,var range = Range(start: 0, end: 0)但现在我得到了一些新的错误.
无法将表达式的类型'()'转换为在行中键入'Range'错误
range = sourceString.rangeOfString(HTMLTags, options: NSStringCompareOptions.RegularExpressionSearch)
Run Code Online (Sandbox Code Playgroud)
并且'Int'与该行的'String.Index'不同
sourceString = sourceString.stringByReplacingCharactersInRange(range, withString: "")
Run Code Online (Sandbox Code Playgroud)
我搜索了一个解决方案,并发现了这篇文章.然后我将range变量声明更改为此.
var range = Range<String.Index>(start: 0, end: 0)
Run Code Online (Sandbox Code Playgroud)
但我现在得到这个新错误!调用中的额外参数'end'
我无法找到解决这个问题的方法.有人可以帮忙吗?
谢谢.
Swift String方法rangeOfString()返回一个可选项Range?,它没有location属性但可以使用条件绑定(if let)进行检查.
如果你更换NSString方法stringByReplacingCharactersInRange()
由斯威夫特String法replaceRange()(或在这种情况下,简单地通过removeRange()),那么你完全可以利用工作,Range<Swift.Index>
而无需将其转换为NSRange或Range<Int>.
func removeHTMLTags(source : String) -> String {
var sourceString = source
let HTMLTags = "<[^>]*>"
while let range = sourceString.rangeOfString(HTMLTags, options: .RegularExpressionSearch) {
sourceString.removeRange(range)
}
return sourceString;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5921 次 |
| 最近记录: |