为什么成员初始化程序仅为结构提供?
我是否需要自己编写初始化程序?
答案 0 :(得分:6)
我是否需要自己编写初始化程序?
是
2015年12月/ 2016年1月,我们已经详尽地讨论了proposal to extend memberwise initializers to classes并使其更加灵活{/ 3}}。最终,提案on the Swift Evolution mailing list出于各种原因,有可能在稍后重新审视该主题(在Swift 3发布之后)。
在拒绝中,Chris Lattner指出至少有一个原因,即成员初始化是专门为结构提供的:因为它可以编写纯粹的"包的属性",例如Vec4
或CGRect
,开销最小:
2)成员初始糖有利于“POD”类型和其他“属性包”类型(例如“Vec4"”)和Cocoa的许多C结构类型(CGRect等)。在这些情况下,客户端通常希望显式初始化所有字段,并且成员初始化建议消除了此样板。这种情况是我们现有功能尝试服务的。
大多数类可能更复杂,并且您希望更多地控制成员初始化程序,这也会使该功能更加复杂。