在字符串中创建NSRange时崩溃

问题描述 投票:0回答:1

我在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
swift string nsrange
1个回答
0
投票

这在操场上有效:

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)
}

尽管看起来这是一种怪异的方式。也许重新考虑您的方法。

© www.soinside.com 2019 - 2024. All rights reserved.