次のコードは、古いSwiftで完全に機能しました。これは文字列の拡張です
func stringByConvertingHTML() -> String {
let newString = replacingOccurrences(of: "\n", with: "<br>")
if let encodedData = newString.data(using: String.Encoding.utf8) {
let attributedOptions : [String: AnyObject] = [
NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType as AnyObject,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8 as AnyObject
]
do {
let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil) //Crash here
return attributedString.string
} catch {
return self
}
}
return self
}
しかしSwift 3では、
***キャッチされない例外 'NSInvalidArgumentException'によるアプリの終了、理由: '-[_ SwiftValue unsignedIntegerValue]:認識されないセレクターがインスタンス0x6080002565f0に送信されました
誰が何をする必要があるのか教えてください?
私は同じ問題に遭遇しました:
_let attributedOptions : [String: AnyObject] = [
NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType as AnyObject,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8 as AnyObject
]
_
ここで_String.Encoding.utf8
_型チェックは失敗します。 NSNumber(value: String.Encoding.utf8.rawValue)
を使用します
Swift3では、AnyObjectへのキャストはもう必要なく、NSNumberも必要ありません。
let attrs: [String: Any] = [
NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue
]
この投稿は私の一日を救った。 Swift 3)に移行した後、String.Encoding.utf8
からString.Encoding.utf8.rawValue
への小さな変更により、ここで報告されたトラップが修正されました。
元の行:
...
options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8],
...
変更後
options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue],
最後に.rawValue
を追加...