Не удается получить атрибут string для работы в Swift

Я пытаюсь установить некоторые атрибуты строки в коде, но не могу заставить NSAttributedString работать. Это функция, которая должна изменить строку:

func getAttributedString(string: String) -> NSAttributedString
{
    var attrString = NSMutableAttributedString(string: string)
    var attrs = [NSFontAttributeName : UIFont.boldSystemFontOfSize(18.0)]

    attrString.setAttributes(attrs, range: NSMakeRange(0, attrString.length))

    return attrString
}

И вот как я его использую:

if (self.product.packageDimensions != nil) {
        self.descriptionLabel.text = 
                   self.descriptionLabel.text + self.getAttributedString("Package dimensions:").string + 
                   "\n\(self.product.packageDimensions) \n"
    }

Но шрифт остается прежним. Что я делаю не так?

Ответ 1

Вы делаете 2 ошибки в своем коде.

  • setAttributes нужен словарь, а не массив
  • когда вы используете атрибут string, вы получите только string, все атрибуты будут потеряны.

Чтобы добавить или изменить атрибуты в атрибутированной строке, он должен быть изменен. Вы получаете только NSMutableString из атрибута attributedText. Если вы хотите изменить его, создайте из него измененную версию и измените ее. Затем вы можете установить атрибут attributedText в новую изменяемую версию.


Если вы можете указать атрибутную строку в качестве аргумента, я приведу вам пример, который работает:

func setFontFor(attrString: NSAttributedString) -> NSMutableAttributedString {
    var mutableAttrString: NSMutableAttributedString = NSMutableAttributedString(attributedString: attrString)
    let headerStart: Int = 0
    let headerEnd: Int = 13
    mutableAttrString.addAttribute(NSFontAttributeName, value: UIFont.boldSystemFontOfSize(18.0), range: NSMakeRange(headerStart, headerEnd))

    return mutableAttrString
}

Использование:

myLabel.attributedText = setFontFor(myLabel.attributedText)

Как вы можете видеть, я использовал свойство attributedText класса UILabel, он также работает для UITextView и других. Если у вас есть другой ярлык, вы можете создать новую NSAttributedString с инициализатором NSAttributedString(normalString), как вы уже использовали в вопросительном коде.

Ответ 2

if (self.product.packageDimensions != nil) {
        self.descriptionLabel.attributedText = 
                   self.descriptionLabel.attributedText + self.getAttributedString("Package dimensions:").string + 
                   "\n\(self.product.packageDimensions) \n"
    }

Вы должны использовать метод attributedText