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")