NSRange
の文字列内の複数の文字列を検索しようとしています。Swiftを使用してNSStringからNSRangeとしてNSRangeの文字列を検索するNSAttributedStringで使用するNSRangeの結果
私のコードでは、String.range(of: String, options: , Range)
メソッドを使用してRange
を探し、NSRange
に変換します。
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
}
}
が質問:私はNSRange
を見つけるためにNSString.range()
を使用する場合、それはに動作しますが、テキストは、絵文字として、マルチコード単位のUnicode文字が含まれている場合、この変換が失敗します。私はこれを試していますが、私の次のコードはrange:
部分にエラーがあります。
let findInNsString = findInString as NSString
while let range = findInNsString.range(of: stringToFind, options: [.literal, .caseInsensitive], range: nextStartIndex..<findInString.endIndex)
上記のエラーを理解して修正するには、事前に感謝します。 NSRange
にRange
を変換するための正しい方法を見つけた