![](/img/trans.png)
[英]Swift 3 - NSCoding without the annoyance of inheriting from NSObject
[英]Initializing variable in a private function when inheriting from NSObject
當我嘗試在擴展NSObject
同時在私有函數中初始化變量時:
class MyClass: NSObject {
private var _myVar: Int
override init() {
initializeMyVar()
super.init()
}
private func initializeMyVar() {
_myVar = 4
}
}
我懂了
在'super.init'調用之前的方法調用'initializeMyVar'中使用的'self'
如果我嘗試在super.init()
initializeMyVar()
之前調用initializeMyVar()
,但要切換行,以便首先調用super.init()
:
override init() {
super.init()
initializeMyVar()
}
我懂了
在super.init調用中未初始化屬性“ self._myVar”
擺脫錯誤的唯一方法是擺脫私有函數並首先初始化變量。
override init() {
_myVar = 4
super.init()
}
為什么是這樣? 擴展NSObject
時,是否無法在私有函數中初始化非可選成員變量?
使用自己的私有初始化程序的一種方法是將變量顯式標記non-optional
。 像下面的代碼:
class MyClass: NSObject {
private var _myVar: Int!
override init() {
super.init()
initializeMyVar()
}
private func initializeMyVar() {
_myVar = 4
}
}
initializeMyVar()
super.init()
它與NSObject
沒有任何關系。 當您調用超類的init
時,這是一般規則。 在初始化對象或分配所有non-optional
變量之前,無法調用self
方法
_myVar = 4
super.init()
super.init()
initializeMyVar()
在您在super.init()
之后分配變量的第二種情況下,您不給變量賦值,這是不可能的,因為那樣您的值將為nil
,這也是不可能的,因為您的變量不是可選的。 然后在這種情況下,將變量設為可選
private var _myVar: Int?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.