当我尝试在扩展NSObject
的同时在私有函数中初始化变量时:
class MyClass: NSObject {
private var _myVar: Int
override init() {
initializeMyVar()
super.init()
}
private func initializeMyVar() {
_myVar = 4
}
}
我知道
在'super.init'调用之前在方法调用'initializeMyVar'中使用的'self'
如果我尝试在initializeMyVar()
之前调用super.init()
,但是要切换线路,以便首先调用super.init()
:
override init() {
super.init()
initializeMyVar()
}
我知道
未在super.init调用中初始化属性'self._myVar'
摆脱错误的唯一方法是摆脱私有函数并首先初始化变量。
override init() {
_myVar = 4
super.init()
}
这是为什么?扩展NSObject
时是否无法在私有函数中初始化非可选成员变量?
答案 0 :(得分:1)
使用自己的私有初始化程序的一种方法是将变量明确标记为non-optional
。类似于以下代码:
class MyClass: NSObject {
private var _myVar: Int!
override init() {
super.init()
initializeMyVar()
}
private func initializeMyVar() {
_myVar = 4
}
}
答案 1 :(得分:1)
initializeMyVar()
super.init()
它与NSObject
没有任何联系。当您调用超类的init
时,这是一般规则;您无法在初始化对象或分配所有self
变量之前调用non-optional
的方法
_myVar = 4
super.init()
super.init()
initializeMyVar()
在第二种情况下,您在super.init()
之后分配变量,则不给变量赋值,这是不可能的,因为那样您的值将具有nil
,这也是不可能的,因为您的变量不是可选的。然后在这种情况下,将变量设为可选
private var _myVar: Int?