2015-11-10 28 views
1

我试图能够序列化和解码自定义类。这个类本身有一个属性,这是一个枚举数组,如下所示:将枚举数组作为属性在自定义类上使用NSCoding

(我已阅读如何使用原始值并序列化,但我没有任何运气计算出如何使用数组像这样)。

enum WeekDays : String { 

case Sunday  = "Sunday" 
case Monday  = "Monday" 
case Tuesday = "Tuesday" 
case Wednesday = "Wednesday" 
case Thursday = "Thursday" 
case Friday  = "Friday" 
case Saturday = "Saturday" 
} 

class User: NSObject, NSCoding { 

var name  : String 
var workDays : [WeekDays] 

init(name: String, workDays: [WeekDays]) { 

    self.name = name 
    self.workDays = workDays 
} 

required init(coder aDecoder: NSCoder) { 

    self.name = aDecoder.decodeObjectForKey("name") as! String 
    //  self.workDays = ???? 
} 

func encodeWithCoder(aCoder: NSCoder) { 

    aCoder.encodeObject(self.name, forKey: "name") 
//  aCoder.encodeObject(self.workDays, forKey: "workDays") 
} 

} 

回答

1

如何在本书以下马特·诺伊堡的想法呈现内章 “的iOS 9编程基础与雨燕”,“对象类型”:

据他介绍,一个优雅的修复(在WWDC建议2015视频)是教授NSCoder,编码器的类,当forKey:参数是WeekDays而不是String时该怎么做。因此,在一个扩展,你可以重载encodeObject:forKey:方法:

extension NSCoder { 
    func encodeObject(objv: AnyObject?, forKey key: WeekDays) { 
     self.encodeObject(objv, forKey:key.rawValue) 
    } 
} 

然后我会尝试遍历平日的数组和胶水所有需要的值作为一个长字符串,如:“星期日|星期一|。 ..“

+0

我想我只是要使用你的答案的底部,并做一个字符串,我可以重新组装时,它被解码。 –