Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift Explit与Codable的一致性删除了结构上的成员初始值设定项生成_Swift_Codable - Fatal编程技术网

Swift Explit与Codable的一致性删除了结构上的成员初始值设定项生成

Swift Explit与Codable的一致性删除了结构上的成员初始值设定项生成,swift,codable,Swift,Codable,鉴于: 我可以使用一个方便的初始值设定项: 让foo=foo(bar:bar()) 但是如果Bar本身不是Codable,或者出于其他原因,我需要在Foo上显式实现Codable,那么方便的成员初始值设定项将不再存在: struct Foo { let bar: Bar } 我得到: 让foo=foo(bar:bar()) 调用中的参数标签不正确(具有“bar:”,应为“from:”) 这里有可能做到两全其美吗?您可以在扩展中实现Codable一致性 在扩展中添加任何结构初始值设定项

鉴于:

我可以使用一个方便的初始值设定项:

让foo=foo(bar:bar())

但是如果
Bar
本身不是
Codable
,或者出于其他原因,我需要在
Foo
上显式实现
Codable
,那么方便的成员初始值设定项将不再存在:

struct Foo {
    let bar: Bar
}
我得到:

让foo=foo(bar:bar())

调用中的参数标签不正确(具有“bar:”,应为“from:”)



这里有可能做到两全其美吗?

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

在扩展中添加任何结构初始值设定项时,不会删除memberwise初始值设定项

struct Foo: Codable {

    init(from decoder: Decoder) throws {

    }

    func encode(to encoder: Encoder) throws {

    }

    let bar: Bar
}

我喜欢这个,这是一个很好的区分“替换”和“扩展”语义的方法。你想扩展已经存在的内容吗?使用扩展名!:什么?!来吧,苹果。你可以做得更好。fgs-_-不幸的是,如果struct在一个框架内,这是不起作用的。超级棒的答案,我在这个问题上撞了头,这救了我
struct MyStruct {
    var name: String
}
extension MyStruct: Codable {} // preserves memberwise initializer

MyStruct(name: "Tim")