没有初始值的存储属性"text"会阻止合成的初始值设定项

20 initialization swift

我正在快速学习,并提出了下面的简单代码.

class ARandom{
    var number: Int = 0
    var text: String
}
Run Code Online (Sandbox Code Playgroud)

但是,Xcode显示以下错误:

stored property "text" without initial value prevents synthesized initializers
Run Code Online (Sandbox Code Playgroud)

为什么会这样?什么是合成初始化器?为什么没有初始值的"text"会阻止systhesised initialiser?请有人请向我解释一下吗?提前谢谢任何帮助!

Jam*_*ini 33

你有几个选择.

  1. 使text可选.

    var text: String?

  2. text一个默认值

    var text: String = ""

  3. textARandom初始化程序中给出一个值

    init() { text = "" }

发生这种情况的原因是你定义textString.它不是可选的.从本质上讲,你说它始终是一个String永远不会nil.

使用当前代码,如果您创建了一个新实例ARandom,text则没有任何价值 - 如果text不是可选的,那么这是不可能的

Apple的文档可能会更好地解释它

在创建该类或结构的实例时,类和结构必须将其所有存储的属性设置为适当的初始值.存储的属性不能保留在不确定的状态.

您可以在初始化程序中为存储的属性设置初始值,也可以通过将默认属性值指定为属性定义的一部分来设置初始值.

  • 另外,如果你的使用模式是创建一次对象而从不修改它,那么使它成为`struct`并用`let`定义所有成员变量.这将创建一个合成的init,它获取所有未设置变量的值. (2认同)