Cra sh при создании NSRange в String - PullRequest
0 голосов
/ 25 января 2020

Я сталкиваюсь со случайным крэ sh в создании 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 по причинам производительности

1 Ответ

0 голосов
/ 25 января 2020

Это работает на детской площадке:

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

Похоже, странный способ go об этом, хотя. Возможно, переосмыслите свой подход.

...