Ich habe die folgende Struktur ...Swift Kodierbare Protokoll ... Codierung/Decodierung NSCoding Klassen
struct Photo: Codable {
let hasShadow: Bool
let image: UIImage?
enum CodingKeys: String, CodingKey {
case `self`, hasShadow, image
}
init(hasShadow: Bool, image: UIImage?) {
self.hasShadow = hasShadow
self.image = image
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
hasShadow = try container.decode(Bool.self, forKey: .hasShadow)
// This fails
image = try container.decode(UIImage?.self, forKey: .image)
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(hasShadow, forKey: .hasShadow)
// This also fails
try container.encode(image, forKey: .image)
}
}
eine Photo
Encoding irgendwie ...
Optional nicht kodierbaren nicht entspricht, weil UIImage tut entsprechen nicht Codieren
Decodierung schlägt fehl mit ...
Key nicht als erwartet nicht optionalen Typen Optional für Codierungsschlüssel \ "image \" "))
Gibt es eine Möglichkeit Swift Objekte zu kodieren, die umfassen NSObject
Unterklasse Eigenschaften gefunden, die NSCoding
entsprechen (UIImage
, UIColor
, usw.)?
Sie haben benutzerdefinierten Encoder/Decoder-Code zu schreiben, um die Objekte zu archivieren/dearchivieren zu und von 'Data'. Bitte lesen Sie [Encoding and Decoding Custom Types] (https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types) – vadian