ios - 如何快速将特定格式转换为任何对象?

标签 ios swift swift2 nskeyedarchiver

当前格式

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/

相关文章:

ios - 使用 Parse : show an alert when the app is in background 推送通知

ios - 我想在 ios 中使用具有不同数据的相同 UserInterface

ios - 使用 RestKit 序列化带有子对象的对象 [POSTing]

ios - Swift - 如何在协议(protocol)上使用 KVO 的 'observe' 方法

swift - RxSwift,将Observable<[array]>分为Observable<a>,Observable<b>

ios - uiview 类型的值没有成员大小

swift - 为什么 Swift build 命令仅在开发中可用?

ios - iOS 中的 Core Bluetooth LE 和 Classical

html - html head 或 htaccess 文件中的苹果触摸图标

ios - 关闭时保存 VC (IOS)