簡體   English   中英

從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM