为啥最新的 Swift 版本总是说变量在使用前没有初始化

Posted

技术标签:

【中文标题】为啥最新的 Swift 版本总是说变量在使用前没有初始化【英文标题】:Why latest Swift version always says variable is not initialized before use为什么最新的 Swift 版本总是说变量在使用前没有初始化 【发布时间】:2016-05-03 10:20:14 【问题描述】:

举个例子

Class A 

var a : Int

 override func viewDidLoad() 
    super.viewDidLoad()
        a=0

当它说变量未初始化时,即使我已经先在类中声明了。

【问题讨论】:

因为viewDidLoad 不等同于init 只需添加var a: Int? 谢谢。但我的问题是,我已经将 a 声明为整数,为什么我无法为其赋值。 因为变量必须在init 方法或声明行中初始化。 更多信息请阅读:- ***.com/questions/24057171/… 【参考方案1】:

viewDidLoad 不等同于init

我建议你要么使用可选项:

var a:Int?

或者你可以直接在它的声明中初始化你的变量

var a:Int = 0

最后但同样重要的是,如果您想以任何其他方式初始化,请在 init 中进行

override init() 
    super.init()

    a = 0

【讨论】:

【参考方案2】:

当你用 Int 在类中声明属性时,它表明它没有初始化器。要么在初始化时给出值var a : Int = 0 或使用用于初始化类属性的 init 块给出值。或者你也可以给声明为可选的? var x : Int?

override init() 
super.init()
a = 0

【讨论】:

【参考方案3】:

Swift 执行两阶段初始化:

两阶段初始化 Swift 中的类初始化分为两个阶段 过程。在第一阶段,每个存储的属性都被分配一个 引入它的类的初始值。一旦初始状态 对于已确定的每个存储属性,第二阶段 开始,每个班级都有机会自定义其 在新实例被认为准备好之前进一步存储属性 供使用。”

基本上,这意味着属性在提供初始值之前还不能使用。

在 Objective-C 中,这是在内部处理的,因为属性设置为 nil0(取决于数据类型)直到初始化。

此行为由 Swift 中的 Optionals 提供。

“在值可能不存在的情况下,您可以使用可选项。一个 可选说:

有一个值,它等于 x 或

根本没有价值”

正如其他答案所提到的,您可以使用 "?"

声明一个可选项

例如:var a : Int?

详情请参考:The Swift Programming Language (Swift 2.2).

【讨论】:

以上是关于为啥最新的 Swift 版本总是说变量在使用前没有初始化的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 UILabel 变量总是为零?

用vsphere client 来连接vcenter 为啥会说连接vcenter 没有权限呢!请问你们谁知道呢?

linux下安装JDK,为啥显示别的版本号?

为啥这个 volatile 变量的地址总是为 1?

各位大神,我的eclipse为啥安装不了,JDK总是提示说啥DLL?我之前安装过俩次都成功了,

51单片机在申请变量时总是有data,idata,xdata等限定词,可以不用吗?有啥好处吗?为啥别的单片机没有