Раскрашивание NSMutableAttributedString в UITextView дает странные результаты

Я пытаюсь создать элементарную IDE/просмотрщик кода, и поэтому я пытаюсь раскрасить определенные слова в UITextView. Я написал небольшой цикл, чтобы найти диапазоны, и еще один, чтобы раскрасить слова в диапазоне на NSMutableAttributedString. Я знаю, что диапазоны вычисляются правильно, потому что оператор печати в конце кода дает правильные индексы. Однако я наблюдаю очень странный результат в приложении (скриншот ниже). Любая идея, что может пойти не так?

КОД

    var ranges = [[Int]]()
    var rcounter = 0

    for word in content.components(separatedBy: [" ", "\n", "."]) {
        if (word == "func") {
            ranges.append([rcounter,rcounter+word.count])
        }
        rcounter += word.count
    }

    let attributedString = NSMutableAttributedString(string:content)

    for range in ranges {
        attributedString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.red, range: NSRange(location:range[0],length:range[1])
    }

    textView.attributedText = attributedString

    print(ranges) // [[0, 4], [288, 292]]

РЕЗУЛЬТАТ

скриншот


person Anters Bear    schedule 03.05.2018    source источник
comment
`NSRange(location:range[0],length:range[1])`: Это (местоположение, длина), а не (startlocation;endLocation)   -  person Larme    schedule 03.05.2018


Ответы (1)


количество отдельных символов отсутствует.

Проверь это.

        var ranges = [[Int]]()

        var rcounter = 0

        let content = "func asdfasdfasdf. sdfdfdf12323 func adfadfasdf func() func. "
        for word in content.components(separatedBy: [" ", "\n", "."]) {
            if (word == "func") {
                ranges.append([rcounter,word.count])
            }
            //add loop count on every loop time
            rcounter += word.count + 1
        }

        let attributedString = NSMutableAttributedString(string:content)

        for range in ranges {
            attributedString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.red, range: NSRange(location:range[0],length:range[1]))
        }

я надеюсь помочь в этом

person Ho Sung Hwang    schedule 03.05.2018