#swift #swift4 #nsattributedstring
#swift #swift4 #nsattributedstring
Вопрос:
Я обновился с Swift 3 до Swift 4 и получаю NSAttributedString
соответствующую ошибку.
Вот мой код:
viewModel.getInviteAFriendInfo(success: { message in
if message.isEmpty{
self.lblDetail.text = "xxxxxxx"
}else{
let htmlString: String = "<html><head><style xxxxxx </style></head><body>(message)</body></html>"
self.lblDetail.setText(try! NSAttributedString(data: htmlString.data(using: .unicode, allowLossyConversion: true)!, options: [NSAttributedString.DocumentAttributeKey.documentType:NSAttributedString.DocumentType.html,NSAttributedStringKey.kern: 2.0], documentAttributes: nil))
}
}, failure: {
self.showAlert("Failed to get text")
})
Вот моя ошибка:
Не удается преобразовать значение типа ‘NSAttributedString.DocumentAttributeKey’ в ожидаемый тип ключа словаря ‘NSAttributedString.DocumentReadingOptionKey’
Прочитал некоторые опубликованные вопросы и решения, попытался изменить NSAttributedString.DocumentAttributedKey
NSAttributedString.DocumentReadingOptionKey
, но все равно получил ошибку.
Ответ №1:
Значение, которое вы пытаетесь передать options
параметру, необходимо разделить.
Во-первых, documentType
это from NSAttributedString.DocumentReadingOptionKey
, а не NSAttributedString.DocumentAttributeKey
.
Секунд, kern
необходимо передать documentAttributes
параметру, а не options
параметру.
Это намного проще, если вы разделите код:
let options: [NSAttributedString.DocumentReadingOptionKey : Any] = [ .documentType: NSAttributedString.DocumentType.html ]
let attributes = [ NSAttributedString.Key.kern: 2.0 ] as NSDictionary?
let data = htmlString.data(using: .utf8)!
let attrStr = try? NSAttributedString(data: data, options: options, documentAttributes: amp;attributes)
Комментарии:
1. Спасибо за вашу помощь, я пытаюсь найти, как получить HtmlString.data из HtmlString: String = «xxx» (извините, но я совсем новичок в iOS)
2. Смотрите мой обновленный ответ. Я забыл вернуться раньше и закончить это.
3. Большое вам спасибо за вашу любезную помощь! Я передал значение «attrStr» как «self.lblDetail.setText (attrStr)» . Ошибка исчезла! Исходный код действительно слишком длинный и запутанный. Здорово так разделять!
Ответ №2:
Попробуйте это
var htmlString: String = "<html><head><style xxxxxx </style></head><body>(message)</body></html>"
if let attributedString = try? NSAttributedString(data: (htmlString.data(using: .unicode, allowLossyConversion: true)!), options: [.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil) {
self.lblDetail.attributedText = attributedString
}
Комментарии:
1. Спасибо за вашу помощь, это также исправило ошибку, но я не уверен, нормально ли, что «kern: 2.0» не используется.