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)