/ / Klucz DocumentReadingOptionKey uszkodzony po migracji swift4 - swift4, xcode9

DocumentReadingOptionKey klucz uszkodzony po migracji swift4 - swift4, xcode9

Używając następującego kodu migrowano z swift3 do swift4,

let options: [NSAttributedString.DocumentReadingOptionKey: AnyHashable] =
[.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue]

let str = try NSAttributedString( data:string!.data(using: String.Encoding.utf8, allowLossyConversion: true
)!, options:options, documentAttributes: nil)

iOS 9+ nie ma problemu z uruchomieniem systemu iOS 8.3, wyjście konsoli: "dyld: Symbol nie znaleziony: _NSCharacterEncodingDocumentOption"; Zostanie przekazany po skomentowaniu „.characterEncoding: String.Encoding.utf8.rawValue”.

Odpowiedzi:

4 dla odpowiedzi № 1

Znalazłem rozwiązanie. Powinieneś usunąć .characterEncoding dla swift4. Działa na ios8,9,11.

Przykład:

public func htmlToString() -> String? {
guard let data = data(using: .utf8) else { return nil }
do {
return try NSAttributedString(
data: data,
options: [
.documentType: NSAttributedString.DocumentType.html
],
documentAttributes: nil
).string
} catch let error as NSError {
print(error.localizedDescription)
return  nil
}
}

Miłego dnia!


0 dla odpowiedzi nr 2

Dla wszystkich iOS 8 użyj tego sposobu dla klucza

NSAttributedString.DocumentReadingOptionKey(rawValue: "CharacterEncoding")

zamiast stawiać

NSAttributedString.DocumentReadingOptionKey.characterEncoding

bezpośrednio.

Uwaga: Nie używaj sprawdzania wersji, aby zadzwonić NSAttributedString.DocumentReadingOptionKey.characterEncoding, w przeciwnym razie nadal nie działa.