gpt4 book ai didi

ios - 我想在同一个类中有两个版本的 encodeWithCoder

转载 作者:行者123 更新时间:2023-11-28 09:08:29 25 4
gpt4 key购买 nike

假设我有一个对象 Person。(我知道 Person 有语法错误。请忽略这些错误。)

class Person: NSObject, NSCoding {

var name : String
var salary: NSNumber


// MARK: NSCoding

required convenience init(coder decoder: NSCoder) {
self.init()
self.name = decoder.decodeObjectForKey("name") as String
self.salary = decoder.decodeObjectForKey("salary") as NSNumber
}

func encodeWithCoder(coder: NSCoder) {
coder.encodeObject(self.name, forKey: "name")
coder.encodeObject(self.salary, forKey: "salary")
}

}

我的问题是:是否可以有两个单独的 encodeWithCoder 方法..一个在存档对象中包含薪水,一个不包含薪水。像这样的东西:

func encodeWithCoderPrivate(coder: NSCoder) {
coder.encodeObject(self.name, forKey: "name")
coder.encodeObject(self.salary, forKey: "salary")
}

func encodeWithCoderPublic(coder: NSCoder) {
coder.encodeObject(self.name, forKey: "name")
}

在 NSObject 中实现多个存档方法的最佳方式是什么,以限制写入存档的字段?

最佳答案

与其尝试使用它的 2 个版本,不如弄清楚是什么决定了您要使用的编码,并将其设为单独的标志/字段并对其进行编码。

func encodeWithCoder(coder: NSCoder) {
coder.encodeObject(self.name, forKey: "name")
if self.someFlag == true {
coder.encodeObject(self.salary, forKey: "salary")
}
// encode flag as well
}

然后您可以在 initWithCoder 中做同样的事情,首先解析标志并根据其值解码其余字段。

关于ios - 我想在同一个类中有两个版本的 encodeWithCoder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30203014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com