为什么Swift不提供类成员初始值设定项?

为什么成员初始化只为结构提供?

我是否需要自己写初始者?

我是否需要自己写初始者?

是。

在2015年12月/ 2016年1月的Swift Evolution邮件列表上,已经详尽地讨论了将成员初始值设定项扩展到类并使其更加灵活的build议 。

最终,这个提案因为各种原因被拒绝了,可能会在稍后(在Swift 3发布之后)重新讨论这个话题。

在拒绝中,Chris Lattner指出了为什么成员初始化是专门为结构提供的至less一个原因:因为它使得可以用最小的开销编写诸如Vec4CGRect等纯粹的“包”属性:

2)成员初始化糖对“POD”types和其他“包”属性types(例如“Vec4”)和Cocoa拥有的许多C结构types(CGRect等)有很大的好处,在这种情况下,客户经常要初始化所有的字段显式地和成员初始化的提议消除了这个样板,这种情况是我们现有的function试图服务。

大多数类可能更复杂,并且您需要对成员初始化程序进行更多的控制,这也会使该function变得更加复杂。