当前格式
Optional(posterPrint.Frame(name: "RIBBA", productNumber: "303.016.24", productSize: (63.0, 93.0), pictureSize: (61.0, 91.0), pictureWithMatSize: (50.0, 70.0), frameColor: [UIDeviceRGBColorSpace 0.92549 0.92549 0.92549 1], matColor: [UIDeviceRGBColorSpace 0.92549 0.92549 0.92549 1]))
我想将其添加到数组
并转换任何对象。我尝试了很多将此存储在 NSkeyedArchiver
中。我在某处读到元组无法存储在 NSKeyedArchiever
中。任何人都可以帮忙
提前致谢。
最佳答案
要使用NSKeyedArchiver
,您需要使您的对象符合NSCoding
。如果您有元组,则可以单独对元素进行编码/解码:
class MyObject: NSObject, NSCoding {
var id: Int
var size: (Float, Float)
init(id: Int, size: (Float, Float)) {
self.id = id
self.size = size
super.init()
}
required init?(coder aDecoder: NSCoder) {
guard let id = aDecoder.decodeObjectForKey("id") as? Int else { return nil }
guard let size0 = aDecoder.decodeObjectForKey("size.0") as? Float else { return nil }
guard let size1 = aDecoder.decodeObjectForKey("size.1") as? Float else { return nil }
self.id = id
self.size = (size0, size1)
super.init()
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(id, forKey: "id")
aCoder.encodeObject(size.0, forKey: "size.0")
aCoder.encodeObject(size.1, forKey: "size.1")
}
}
您提到了数组,所以我不确定您是否在谈论自定义对象的数组,但现在您的对象符合 NSCoding
,您现在可以存档和取消存档数组这些对象无需进一步努力。
同样,如果您有其他具有 MyObject
属性的对象,则可以对其应用 NSCoding
,并且它可以利用 MyObject
已经符合 NSCoding
:
class ParentObject: NSObject, NSCoding {
var name: String
var value: Int
var child: MyObject
init(name: String, value: Int, child: MyObject) {
self.name = name
self.value = value
self.child = child
super.init()
}
required init?(coder aDecoder: NSCoder) {
name = aDecoder.decodeObjectForKey("name") as! String
value = aDecoder.decodeObjectForKey("value") as! Int
child = aDecoder.decodeObjectForKey("child") as! MyObject
super.init()
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(name, forKey: "name")
aCoder.encodeObject(value, forKey: "value")
aCoder.encodeObject(child, forKey: "child")
}
}
关于ios - 如何快速将特定格式转换为任何对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37611789/