为啥最新的 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 中,这是在内部处理的,因为属性设置为 nil 或 0(取决于数据类型)直到初始化。
此行为由 Swift 中的 Optionals 提供。
“在值可能不存在的情况下,您可以使用可选项。一个 可选说:
有一个值,它等于 x 或
根本没有价值”
正如其他答案所提到的,您可以使用 "?"
声明一个可选项例如:var a : Int?
详情请参考:The Swift Programming Language (Swift 2.2).
【讨论】:
以上是关于为啥最新的 Swift 版本总是说变量在使用前没有初始化的主要内容,如果未能解决你的问题,请参考以下文章
用vsphere client 来连接vcenter 为啥会说连接vcenter 没有权限呢!请问你们谁知道呢?