Swift —可选的初始化
因此,您正在尝试使用可选常量创建自己的类吗?
谜
如果您是像我这样的Swift菜鸟,那么第一次尝试在类中使用一些Optional类型常量创建Swift类时,就会遇到此错误。
现在,您可能会说:“等等,我从未遇到此错误,因为我总是像所有理智的人一样初始化所有的类属性。”
啊哈! 我亲爱的想象中的理想程序员,最初的挫败感是这样的。
在Swift中必须启动其他所有类型的原因是,否则它们将具有nil
值。 但是,Swift中的Optional类型可以为nil
值,我们在代码中按原样处理它们。 因此,我的推论是,Swift中的Optional类型应该可用而无需初始化。
另外,如果您使用可选类型变量而不是可选类型常量 ,则代码将完美编译,如下所示。
那么这是怎么回事? Swift为什么让我们使用未初始化的Optional类型变量而不是常量? 处理Optional类型时,Swift变量和Swift常量之间有什么区别?
揭示
变量和常量之间存在差异的原因是,Swift 变量可以隐式处理显式设置的值,而Swift 常量 每次都需要显式设置其值。
Swift中的每个类型(例如String,Int,Bool等), 除了Optional之外,都具有显式的 .None
值。 但是Swift中的Optional类型具有隐式 .None
值。
这意味着,对于Swift中的任何变量或常量(Optional除外),该值将显式设置为.None
( nil
)。 但是,对于Swift中的任何Optional变量或常量,该值均隐含为 .None
( nil
),即,该值可以为nil
但并不总是nil
。
现在,如上所述,Swift中的变量知道如何处理值的显式和隐式分配。 因此,一个类变量可以从Optional类型推断其初始值,即.None
。 但是, 常量不知道如何处理隐式值,因此无法从Optional类型推断出它的初始值(需要明确地说,“这是您的初始值”)。
结论
Swift中的类变量无需初始化即可处理Optional类型(因为它们可以处理隐式.None值),但是Optional类型的类常量将始终必须被初始化(因为它们无法处理隐式.None值,并且需要显式设置一个值)。
本文是在以下资源的帮助下撰写的:
Swift可选的初始化
感谢您为Stack Overflow提供答案! 请务必回答问题。 提供详细信息并分享… stackoverflow.com 是nil和Optional。在Swift中没有相同的东西吗?
感谢您为Stack Overflow提供答案! 请务必回答问题。 提供详细信息并分享… stackoverflow.com