【发布时间】:2017-06-18 13:00:48
【问题描述】:
我正在尝试在一个字符串中查找多个字符串的NSRange。
在下面的代码中,我使用String.range(of: String, options: , Range) 方法找到Range,并转换为NSRange。当文本包含多代码单元 unicode 字符时,此转换失败,例如表情符号:
let findInString = "This #is a #tag #tag inten#sive????#search" // MAY CONTAINS EMOJIS
let findStrings = ["#is","#tag","#sive","#search"]
let result = NSMutableAttributedString(string: findInString)
for (index, stringToFind) in findStrings.enumerated() {
var nextStartIndex = findInString.startIndex
while let range = findInString.range(of: stringToFind, options: [.literal, .caseInsensitive], range: nextStartIndex..<findInString.endIndex) {
let start = findInString.distance(from: findInString.startIndex, to: range.lowerBound)
let length = findInString.distance(from: range.lowerBound, to: range.upperBound)
result.addAttribute(NSLinkAttributeName, value: "\(index):", range: NSMakeRange(start, length))
nextStartIndex = range.upperBound
}
}
问题:它会起作用如果我使用NSString.range() 来查找NSRange。我正在尝试这个,但我的以下代码在range: 部分有错误。
let findInNsString = findInString as NSString
while let range = findInNsString.range(of: stringToFind, options: [.literal, .caseInsensitive], range: nextStartIndex..<findInString.endIndex)
我需要帮助来理解和纠正上述错误,在此先感谢。
【问题讨论】:
标签: ios swift string nsstring nsattributedstring