初始化期间可编码的默认值



我是 Swift 的新手,我正在为我的项目开发一个功能标志概念,但我被困在默认标志值中使用可编码。目前我的代码看起来像这样

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 文件中的所有值,这就是为什么这里没有明确提及它的原因。在此实现之前,我没有任何默认值,并且使用结构从远程配置文件中读取所有内容,该文件工作正常。现在,如果无法访问远程配置文件,我将在下一步中为我的功能设置默认值。

我希望我可以初始化这个类,所以我将获得一个具有默认值的类对象,就像我从远程文件读取时得到的对象一样。

我无法在不传递 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()

如果需要默认值。

相关内容

  • 没有找到相关文章

最新更新