Выделенная жирным шрифтом часть атрибутированной строки с использованием расширения Swift в 2024 г.IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Выделенная жирным шрифтом часть атрибутированной строки с использованием расширения Swift в 2024 г.

Сообщение Anonymous »

Я хотел бы сделать то, что может показаться довольно простой вещью, которая была бы тривиальной в SwiftUI, здесь, в SO, уценке или html: выделить пару слов в строке в Swift, в идеале используя расширение для повторного использования. Например, выделите жирным шрифтом слово «world» в слове «Hello world». Я был бы рад расширению любого типа String, например String, NSString, NSAttributedString, NSMutableAttributedString и т. д., поскольку я могу идти вперед и назад. Все примеры, которые я нашел (обычно датированные несколько лет назад), не компилируются. Например (с закомментированными ошибками):

Код: Выделить всё

extension NSMutableAttributedString {
func bold(_ text: String, font: UIFont = .systemFont(ofSize: 17, weight: .bold)) -> Self {
let range = self.range(of: text)!
self.addAttribute(.font, value: font, range: range) //error 'Value of type self has no member range'
return self
}
}

public extension String {
func attributedString(with boldText: String, boldTextStyle: [NSAttributedString.Key: Any] = [.font: UIFont.boldSystemFont(ofSize: 17)]) -> NSAttributedString {
let attributedString = NSMutableAttributedString(string: self)
let boldTextRange = range(of: boldText)!
attributedString.addAttributes(boldTextStyle, range: boldTextRange) //Cannot convert value of type 'Range' to expected argument type 'NSRange' (aka '_NSRange')
return attributedString
}
}
Изменить: еще один ответ SO в Objective-C, не использующий расширение, которое также компилируется для меня. Выдает около 10 ошибок:

Код: Выделить всё

NSString *normalText = @"Hello ";
NSString *boldText = @"world";

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:normalText];

NSDictionary *attrs = @{ NSAttributedString.Key.font: [UIFont boldSystemFontOfSize:15] };//throws 5 errors
NSMutableAttributedString *boldString = [[NSMutableAttributedString alloc] initWithString:boldText attributes:attrs];//throws 5 errors

[attributedString appendAttributedString:boldString];
(Я пробовал много других подходов из старых ответов и нескольких ИИ, но безуспешно.)
Может ли кто-нибудь подсказать, как заставить вышеизложенное работать в современный Swift, за исключением SwiftUI, или как создать расширение строки, чтобы выделить часть строки. Спасибо за любые предложения.

Подробнее здесь: https://stackoverflow.com/questions/790 ... on-in-2024
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»