Как получить UIFont из AttributedString run.font

У меня есть следующий код в качестве расширения для AttributedString:

      func setBold() -> AttributedString {
    var newAS = self
    for run in runs {
        if let font = run.font { newAS[run.range].font = font.bold() }
        else { // assume NSFont
            let uiFont = run.font ?? UIFont()
            newAS[run.range].font = uiFont.bold()
        }
    }
    return newAS
}

И это прекрасно работает, но я действительно не понимаю, почему run.font может быть нулевым в строке после

      for run in runs { 

и

      run.font ?? UIFont()

возвращает UIFont, который хранится в строке AttributeContainer, а не в UIFont(). Кто-нибудь может объяснить, что происходит? Кстати, у меня есть расширение UIFont с функцией жирного шрифта (), которая здесь не показана.

Я случайно наткнулся на это, пытаясь извлечь CTFont (UIFont) из атрибутов, и я доволен, но удивлен, что это работает.

0 ответов

Другие вопросы по тегам