Если есть только один дополнительный символ, тогда dateString.count + 2
длиннее строки, и вы получаете сбой, потому что диапазон недопустим.
Почему длина диапазона основана на dateString.count + 2
?Почему бы не собрать нужную строку, а затем передать ее инициализатору NSMutableAttributedString
?Тогда вы можете напрямую получить длину этой строки.И почему бы не передать нужные атрибуты инициализатору, поскольку вы все равно хотите, чтобы они применялись ко всей строке?
Кроме того, вы не можете использовать count
в строке Swift, чтобы получить длину при работе с NSString
или NSAttributedString
.Вам необходимо использовать dateString.utf16.count
.Это связано с тем, что NSRange
для NSString
и NSAttributedString
основаны на 16-разрядных символах.
Вот более простой способ создания атрибутной строки, в которой атрибуты применяются ко всей строке:
let dateString = TimeUtils.formatTimeOnly(from: data.date!)
let dateAttributes = [NSFontAttributeName: UIFont(name: "SourceSansPro-Regular", size: 11)!, NSForegroundColorAttributeName: UIColor.gray]
let dateMutableString = NSMutableAttributedString(string: "\n\(dateString)", attributes: dateAttributes)