Kann ein Tupel mit NSCoding
gespeichert werden? Ich habe ein Tupel wie ((UInt8, UInt8), (UInt8, UInt8))
. Aber aCoder.encodeObject(myTuple)
funktioniert nicht. Muss ich das Tupel in NSData
konvertieren oder ist das absolut nicht möglich? Danke für jede HilfeSwift Codetupel mit NSCoding
8
A
Antwort
5
Tuple kann nicht codiert werden, weil es keine Klasse ist, aber ein Ansatz besteht darin, jede Komponente eines Tupels separat zu codieren und dann dekodieren Sie jede Komponente und setzen dann den Wert des Tupels auf ein Tupel konstruiert aus dem dekodierten Inhalt.
0
Ich möchte nur meinen Code teilen, der einige Updates auf der Grundlage von Ians Code hat. Ich habe meins verwendet, um eine Liste der Kategorie/Unterkategorie der Elemente zu erstellen.
class catSubcatOption: NSObject, NSCoding {
var element: (x: String, y: String)!
override init() {
}
public func encode(with aCoder: NSCoder) {
aCoder.encode(element.category, forKey: "category")
aCoder.encode(element.subcategory, forKey: "subcategory")
}
required init(coder decoder: NSCoder) {
let category = decoder.decodeObject(forKey: "category") as! String
let subcategory = decoder.decodeObject(forKey:"subcategory") as! String
element = (category,subcategory)
} }