我在 NSRange
创建过程中遇到随机崩溃。因为我之前添加了检查,所以我不明白它是如何发生的:
let textStr = "whatever you want"
if let end = textStr.unicodeScalars.index(textStr.startIndex, offsetBy: slide.endIndex, limitedBy: textStr.endIndex){
let realEnd = textStr.unicodeScalars.index(textStr.startIndex, offsetBy: slide.endIndex)
nsRange = NSRange(start...realEnd, in: textStr)
}
slide
是由解析器生成的对象,表示textStr
的一部分。- 出于性能原因,解析器使用
textStr.unicodeScalars
最佳答案
这适用于 Playground :
import Foundation
let textStr = "whatever you want"
let slide = "you"
let start = slide.startIndex // not sure what this was meant to be in your code
if textStr.index(textStr.unicodeScalars.startIndex, offsetBy: slide.unicodeScalars.distance(from: slide.startIndex, to: slide.endIndex), limitedBy: textStr.unicodeScalars.endIndex) != nil {
let realEnd = textStr.index(textStr.unicodeScalars.startIndex, offsetBy: slide.unicodeScalars.distance(from: slide.unicodeScalars.startIndex, to: slide.unicodeScalars.endIndex))
let nsRange = NSRange(start..<realEnd, in: textStr)
}
不过,这似乎是一种奇怪的方式。也许重新考虑你的方法。
关于swift - 在 String 中创建 NSRange 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59910962/