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) 初始化程序。