Диапазон переменного размера для NSMutableAttributedString

У меня есть метка со строкой, показанной ниже. Я бы хотел, чтобы secondVariable был другого цвета. Кажется, я понял, как изменить цвет. Моя проблема заключается в получении диапазона secondVariable.

let str = "\(firstVariable) some random text \(secondVariable)"

let secondVariableRange = str.range(???) 
let secondVariableNSRange = NSRange(secondVariableRange, in: str)

let attributedString = NSMutableAttributedString.init(string: 
    "\(firstVariable) some random text \(secondVariable)")

attributedString.addAttribute(.foregroundColor, value: UIColor.white, 
    range: NSRange(secondVariableNSRange, in: attributedString)

person squarehippo10    schedule 24.05.2018    source источник


Ответы (1)


Есть более простой подход, чем работа с диапазонами. Создайте свою атрибутированную строку по частям.

let attributedString = NSMutableAttributedString(string: 
"\(firstVariable) some random text ")
let attrs: [NSAttributedStringKey : Any] = [ .foregroundColor: UIColor.white ]
let secondString = NSAttributedString(string: "\(secondVariable)", attributes: attrs)
attributedString.append(secondString)

Но если вы действительно хотите получить диапазон, используйте:

let secondVariableRange = (str as NSString).range(of: "\(secondVariable)")
person rmaddy    schedule 24.05.2018
comment
Я действительно думал, что это будет немного сложнее. Мне потребовалась секунда, чтобы понять, что мне также нужно использовать myLabel.attributedText = ... вместо просто myLabel.text = ... Спасибо! - person squarehippo10; 25.05.2018