我是Swift的新手,正在为我的项目开发功能标志概念,并且无法使用codable作为默认标志值。目前我的代码看起来像这样
import Foundation
class KillSwitches: Codable {
public enum CodingKeys: String, CodingKeys {
case featureOne
case featureTwo
case featureThree
}
let featureOne: Bool = true
let featureTwo: Bool = true
let featureThree: Bool = false
}
我有内部帮助程序类,可帮助对json文件中的所有值进行编码和解码,这就是为什么此处未明确提及的原因。在此实现之前,我没有任何默认值,并且正在使用struct从正常工作的远程配置文件中读取所有内容。现在,如果无法访问远程配置文件,则下一步是为功能使用默认值。
我期望可以初始化该类,这样我将获得该类的默认对象,就像从远程文件中读取内容一样。
如果不通过init(来自解码器:),就无法实例化此类。我什至尝试做
KillSwitches.init(from: KillSwitches.self)
这也不起作用,我得到的类型与预期的类型解码器不符。
我的Json看起来像这样
{
"featureOne" : false,
"featureTwo" : true,
"featureThree" : true
}
任何解决此问题的指南/指针均深表感谢。
一旦符合Encodable
,就好像您的类已显式声明一个encode(to:)
方法和一个init(from:)
初始化程序。
通过使用参数声明一个初始化程序,当所有属性都具有默认值时,您将立即失去编译器为您生成的默认(无参数)初始化程序。这就是为什么你做不到的原因KillSwitches()
。这在文档中说明:
Swift为任何为其所有属性提供默认值的结构或类提供默认初始化器,并且自身不提供至少一个初始化器。默认初始化程序仅创建一个新实例,并将其所有属性设置为其默认值。
KillSwitches
已经有一个init(from:)
初始化程序,因此Swift不提供默认的初始化程序。
您只需要在自己中添加无参数的初始化程序即可:
class KillSwitches: Codable {
public enum CodingKeys: String, CodingKey {
case featureOne
case featureTwo
case featureThree
}
let featureOne: Bool = true
let featureTwo: Bool = true
let featureThree: Bool = false
init() { }
}
然后您可以执行以下操作:
let defaultKillSwitches = KillSwitches()
如果需要默认值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句