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 中未初始化变量/对象的默认值的主要内容,如果未能解决你的问题,请参考以下文章