Swift为struct
类型提供成员初始化程序。但是当谈到class
时,我们需要自己明确提供init()
。我试图理解这样一个决定背后的逻辑。
样品,
struct SomeStruct {
var someVar:Int
}
// Memberwise Initializers
let structInstance = SomeStruct(someVar:0)
class SomeClass {
var someVar:Int
}
let classInstance = SomeClass()
~~>
ERROR在第11行,第21行:' SomeClass'无法构造,因为它没有可访问的初始值设定项
let classInstance = SomeClass()
答案 0 :(得分:5)
它背后的逻辑可能是因为string date = "2016111";
不是子类,显然需要一个完整的初始化器,因此它是由语言隐含的。
另一方面,struct
是可子类化的,因此您可能希望将其设计为只能从子类初始化,因此语言不提供隐式初始化程序。 / p>
答案 1 :(得分:2)
(如下面的@Cœur所指出的,这并没有真正回答这个问题,但可能会为它带来价值,所以我会把它留下来)
来自The Language Guide - Classes and Structures [强调我的]:
定义语法
以下是结构定义和类定义的示例:
struct Resolution { var width = 0 var height = 0 } // ...
...
结构类型的成员初始化程序
所有结构都有一个自动生成的成员初始值设定项, 您可以使用它来初始化新结构的成员属性 实例。新实例的属性的初始值可以 按名称传递给成员初始值设定项:
let vga = Resolution(width: 640, height: 480)
与结构不同,类 实例不会收到默认的成员初始化程序。
...
另外值得一提的是,只有结构化没有定义任何自己的自定义初始化器,才能使用这些;来自Language Guide - Initialization
结构类型的成员初始化程序
结构类型会自动接收成员初始值设定项(如果它们) 不要定义任何自己的自定义初始值设定项。与默认值不同 初始化程序,即使结构接收成员初始化程序 它存储了没有默认值的属性。
...