Ошибка преобразования Swift 4: невозможно преобразовать значение типа 'String' в ожидаемый тип аргумента 'NSAttributedStringKey' - PullRequest
0 голосов
/ 22 апреля 2019

Когда я конвертировал из Swift 3 в Swift 4, я получил сообщение об ошибке «NSAttributedStringKey».

Вот мой код:

func height(_ width: CGFloat, font: UIFont, lineBreakMode: NSLineBreakMode?) -> CGFloat {
    var attrib: [NSAttributedStringKey: Any] = [.font: font]
    if lineBreakMode != nil {
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineBreakMode = lineBreakMode!
        attrib.updateValue(paragraphStyle, forKey: NSAttributedStringKey.paragraphStyle.rawValue)
    }
    let size = CGSize(width: width, height: CGFloat(DBL_MAX))
    return ceil((self as NSString).boundingRect(with: size, options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes:attrib, context: nil).height)
}

Вот моя ошибка:

Невозможно преобразовать значение типа 'String' в ожидаемый тип аргумента 'NSAttributedStringKey'

Есть предложения? Я новичок в iOS, поэтому, пожалуйста, будьте точнее.

1 Ответ

0 голосов
/ 22 апреля 2019

Вам необходимо отменить использование .rawValue для клавиши .paragraphStyle.

Также обратите внимание, что для Swift 4.2 (или более поздней версии) вам необходимо заменить любое использование NSAttributedStringKey на NSAttributedString.Key.

DBL_MAX устарело. Используйте .greatestFiniteMagnitude вместо CGFloat(DBL_MAX).

Принудительное развертывание необязательного параметра lineBreakMode приведет к сбою приложения, если передано nil.

...