使用NSCoding
可以存储元组吗?我有一个像((UInt8, UInt8), (UInt8, UInt8))
的元组。但aCoder.encodeObject(myTuple)
不起作用。我是否必须将元组转换为NSData
或者这是绝对不可能的?感谢您的帮助使用NSCoding的Swift编码元组
8
A
回答
5
元组不能编码,因为它不是一个类,但一种方法是分别对一个元组的每个组件进行编码,然后在解码时解码每个组件,然后将元组的值设置为一个元组从解码的内容构建。
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")
}
}
0
我想和大家分享我的代码,它具有基于伊恩的代码一些更新。 我用我的创建元素的类别/子类别的列表。
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)
} }
相关问题
- 1. 无法使用NSCoding编码MKPolyline或MKPolygon
- 2. 使用NSCoding在Swift 3中编码和解码函数如何工作?
- 3. Swift 2.0 NSCoding的单元测试
- 4. Swift enum和NSCoding
- 5. SKProduct在Swift NSCoding错误
- 6. NSCoding在Swift中不工作
- 7. 夫特可编码协议...编码/解码NSCoding类
- 8. Swift - NSCoding归档不起作用
- 9. 使用swift代码编码网址
- 10. Swift,NSCoding保存不能正常工作的类的数组
- 11. 处理Swift中的NSCoding错误
- 12. 使用NSCoding保存对象时出现异常Swift
- 13. NScoding在SWIFT 3.0 Multipeer传输错误
- 14. 使用Swift转发地理编码
- 15. 如何使用NSCoding对通过委托传递的值进行编码
- 16. 如何单元测试NSCoding?
- 17. 使用NSCoder编码数组
- 18. 使用JAXB解组编码
- 19. 我如何编码(与NSCoding)没有rawValue的枚举?
- 20. Swift中的元编程
- 21. Swift属性列表中的元组Swift
- 22. 使用arc4random使用Swift获取数组中的随机元素
- 23. Swift编码/解码emojis
- 24. 重新编码命名的元组
- 25. 使用NSCoding缓存文件的框架
- 26. 如何存档NSDictionary的NSArray(使用NSCoding)?
- 27. iOS swift 3使用UIButton代替UIBarButton编码tableview编辑按钮
- 28. 从Swift的元组数组项目列
- 29. 比较命名元组的Swift数组
- 30. 使用NSCoding进行解码:键值是否存在?