Swift 中未初始化变量/对象的默认值

Posted

技术标签:

【中文标题】Swift 中未初始化变量/对象的默认值【英文标题】:Default value of uninitialized variable/object in Swift 【发布时间】:2016-02-08 17:07:53 【问题描述】:

我是新来的。刚开始学习 Swift,当我谈到可选的主题时,我开始想知道未初始化变量的默认值是什么。

在 Java 中,'int' 被初始化为 0。在 C 中,它得到垃圾值。那么斯威夫特是怎么回事?更准确地说,当我写“var x: Int”时,x 中存储了什么?

另外,如果一个未初始化的对象 "var c: UIColor" 不能指向 nil,它指向什么?

【问题讨论】:

如果是可选的,默认值为nil。如果不是可选的,它没有默认值,必须初始化。 要回答您的“精确”问题...当您编写 var x:Int 时,x 中没有存储任何内容。它是未初始化的(与隐式将其初始化为 0 的 Java/C# 不同)。您只是说您有一个可以保存特定数据类型的变量(在这种情况下为 Int )。您必须在使用它之前显式设置它的值(或者使它成为可选的,在这种情况下,它在初始化之前有一个“nil”值) 谢谢。现在我更清楚了:) 【参考方案1】:

非选项

如果你这样声明一个变量

var color: UIColor

变量的状态是Uninitalized。这意味着编译器在初始化之前不允许您读取它。

print(color)
>> error: variable 'color' used before being initialized

更多

有趣的是,编译器足够聪明,可以在变量被使用之前检查代码的所有分支是否都在初始化变量。

例如此代码将产生错误,因为编译器无法保证 color 在执行 print(color) 之前已初始化。

var color: UIColor
let random = arc4random_uniform(10)
if random > 5 
    color = UIColor.redColor()

print(color)
// error: variable 'color' used before being initialized

可选

另一方面,如果您将变量声明为可选

var color: UIColor?

它被初始化为nil

print(color)
// nil

【讨论】:

【参考方案2】:

非可选变量没有默认值。

无论如何,您都不能在 Swift 中使用未初始化的变量。编译器不允许你。

【讨论】:

以上是关于Swift 中未初始化变量/对象的默认值的主要内容,如果未能解决你的问题,请参考以下文章

Swift 细节

Swift中变量声明和定义的区别

swift 可选项(Optional)

java中证明成员变量有默认初始值

在 JAXB 生成的类中未设置默认布尔值

Java未赋值变量的默认初始值