Ich habe eine Klasse und innerhalb der Klasse ist eine (schnelle) Array, basierend auf einer globalen Struktur. Ich möchte ein Array mit dieser Klasse zu NSUserDefaults speichern. Das ist mein Code:Speichern von Struct in der Klasse zu NSUserDefaults mit Swift
struct mystruct {
var start : NSDate = NSDate()
var stop : NSDate = NSDate()
}
class MyClass : NSObject {
var mystructs : [mystruct]
init(mystructs : [mystruct]) {
self.mystructs = mystructs
super.init()
}
func encodeWithCoder(encoder: NSCoder) {
//let val = mystructs.map { $0 as NSObject } //this also doesn't work
let objctvtmrec = NSMutableArray(mystructs) //gives error
encoder.encodeObject(objctvtmrec)
//first approach:
encoder.encodeObject(mystructs) //error: [mystructs] doesn't conform to protocol 'anyobject'
}
}
var records : [MyClass] {
get {
var returnValue : [MyClass]? = NSUserDefaults.standardUserDefaults().objectForKey("records") as? [MyClass]
if returnValue == nil
{
returnValue = []
}
return returnValue!
}
set (newValue) {
let val = newValue.map { $0 as AnyObject }
NSUserDefaults.standardUserDefaults().setObject(val, forKey: "records")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
Ich habe bereits NSObject subclassed, und ich weiß, ich brauche NSCoding. Aber ich finde keine Möglichkeit, das struct-Array in ein NSMuteableArray oder etwas Ähnliches zu konvertieren, das ich speichern kann. Die einzige Idee bis jetzt ist es, jeden Eintrag durchzugehen und ihn direkt in ein neues Array zu kopieren oder viel oder objective-c Code über das ganze Projekt zu verwenden, so dass ich nie von schnellen Arrays in objektive-c Arrays konvertieren muss. Beides sind Dinge, die ich nicht tun möchte.
'lass structDicts = mystructs.map {[" start ": $ 0. Start," stop ": $ 0.stop]} ' -> Schwerwiegender Fehler: NSArray-Element konnte nicht mit dem Swift-Array-Elementtyp übereinstimmen – Thomas