是否可以使用NSCoding存储元组?我有一个像元组((UInt8,UInt8),(UInt8,UInt8)).但是aCoder.encodeObject(myTuple)不起作用.我是否必须将元组转换为NSData,或者这绝对不可能?谢谢你的帮助
元组不能编码,因为它不是一个类,但一种方法是分别编码元组的每个组件,然后在解码时解码每个组件,然后将元组的值设置为由解码内容构造的元组.
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let obj = SomeClass() obj.foo = (6,5) let data = NSKeyedArchiver.archivedDataWithRootObject(obj) NSUserDefaults.standardUserDefaults().setobject(data,forKey: "books") if let data = NSUserDefaults.standardUserDefaults().objectForKey("books") as? NSData { let o = NSKeyedUnarchiver.unarchiveObjectWithData(data) as SomeClass println(o.foo) // (Optional(6),Optional(5)) } } } class SomeClass: NSObject,NSCoding { var foo: (x: Int?,y: Int?)! required convenience init(coder decoder: NSCoder) { self.init() let x = decoder.decodeObjectForKey("myTupleX") as Int? let y = decoder.decodeObjectForKey("myTupleY") as Int? foo = (x,y) } func encodeWithCoder(coder: NSCoder) { coder.encodeObject(foo.x,forKey: "myTupleX") coder.encodeObject(foo.y,forKey: "myTupleY") } }
原文地址:https://www.jb51.cc/swift/320049.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。