与Codable的Explit一致性消除了结构

时间:2018-01-08 17:25:26

标签: swift codable

假设:

struct Foo {
    let bar: Bar
}

我使用了一个方便的初始化程序:

let foo = Foo(bar: Bar())

但如果Bar本身不是Codable,或者由于某些其他原因我需要在Codable上明确实现Foo,那么便利成员初始值设定为否更长的礼物:

struct Foo: Codable {

    init(from decoder: Decoder) throws {

    }

    func encode(to encoder: Encoder) throws {

    }

    let bar: Bar
}

我得到:

let foo = Foo(bar: Bar())

  

通话中的参数标签不正确(有'栏:',预期'来自:')

这里可以兼顾两全其美吗?

1 个答案:

答案 0 :(得分:12)

您可以在扩展程序中实现Codable一致性。

在扩展中添加任何struct初始值设定项时,不会删除成员初始值设定项。

struct MyStruct {
    var name: String
}
extension MyStruct: Codable {} // preserves memberwise initializer

MyStruct(name: "Tim")