Swift Init 不符合预期类型 'Decoder'
Swift Init does not conform to expected type 'Decoder'
目前,我有一个符合 Codable 的结构:
public struct Preference: Codable {
public let id: String
}
当我尝试使用以下方法初始化对象时:
let preference = Preference(id: "cool")
我收到以下错误:
Argument type 'String' does not conform to expected type 'Decoder'
如何解决这个问题并正确初始化结构?
在没有 explicit 初始化程序的情况下创建结构时
public struct Preference {
public let id: String
}
它免费获得 internal init(id: String)
初始值设定项。内部意味着从另一个目标使用它会导致编译器错误。
将 Decodable
添加到您的结构中也会向该结构添加 public init(from: Decoder)
初始值设定项。
所以初始结构等同于以下
public struct Preference: Codable {
public let id: String
internal init(id: String) {
self.id = id
}
public init(from: Decoder) {
// generated decoding code
}
}
当您尝试使用来自另一个目标的 Preference(id: "cool")
创建实例时,只有一个 public 初始化程序:带有解码器的初始化程序。编译器试图通过将 String
转换为 Decoder
来使用它,但它失败了。
要解决原始问题,您需要明确添加 public init(id: String)
初始化程序。
目前,我有一个符合 Codable 的结构:
public struct Preference: Codable {
public let id: String
}
当我尝试使用以下方法初始化对象时:
let preference = Preference(id: "cool")
我收到以下错误:
Argument type 'String' does not conform to expected type 'Decoder'
如何解决这个问题并正确初始化结构?
在没有 explicit 初始化程序的情况下创建结构时
public struct Preference {
public let id: String
}
它免费获得 internal init(id: String)
初始值设定项。内部意味着从另一个目标使用它会导致编译器错误。
将 Decodable
添加到您的结构中也会向该结构添加 public init(from: Decoder)
初始值设定项。
所以初始结构等同于以下
public struct Preference: Codable {
public let id: String
internal init(id: String) {
self.id = id
}
public init(from: Decoder) {
// generated decoding code
}
}
当您尝试使用来自另一个目标的 Preference(id: "cool")
创建实例时,只有一个 public 初始化程序:带有解码器的初始化程序。编译器试图通过将 String
转换为 Decoder
来使用它,但它失败了。
要解决原始问题,您需要明确添加 public init(id: String)
初始化程序。