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除外),该值将显式设置为.Nonenil )。 但是,对于Swift中的任何Optional变量或常量,该值均隐含为 .Nonenil ),即,该值可以nil但并不总是nil

现在,如上所述,Swift中的变量知道如何处理值的显式隐式分配。 因此,一个类变量可以从Optional类型推断其初始值,即.None 。 但是, 常量不知道如何处理隐式值,因此无法从Optional类型推断出它的初始值(需要明确地说,“这是您的初始值”)。

结论

Swift中的类变量无需初始化即可处理Optional类型(因为它们可以处理隐式.None值),但是Optional类型的类常量将始终必须被初始化(因为它们无法处理隐式.None值,并且需要显式设置一个值)。

本文是在以下资源的帮助下撰写的:

Swift可选的初始化
感谢您为Stack Overflow提供答案! 请务必回答问题。 提供详细信息并分享… stackoverflow.com 是nil和Optional。在Swift中没有相同的东西吗?
感谢您为Stack Overflow提供答案! 请务必回答问题。 提供详细信息并分享… stackoverflow.com