2015-01-17 27 views
1

自我的方法我想實現這樣的事情:斯威夫特:調用初始化裏面

class A { 
    var a, b, c, d: Int 

    init() { 
     reset() 
    } 

    func reset() { 
     a = 1 
     b = 2 
     c = 3 
     d = 4 
    } 

    func blablabla() { 
     ... 
    } 
} 

不能被編譯,錯誤信息:

初始化

之前使用變量「self.a」

沒有任何意義,我必須將代碼從reset()複製到init()

這是一個缺陷還是有另一種方法來做到這一點?

+0

非常類似的問題在這裏:[爲什麼我會得到一個「初始化之前使用的變量」錯誤的行,我初始化變量在Swift?](http://stackoverflow.com/questions/27038889/why- DO-I-GET-A-可變二手之前感初始化錯誤 - 上的線 - 即-I) –

回答

10

不,它不是一個缺陷,只是在初始化器中不能引用self,直到所有存儲的屬性都已初始化,並且調用了超類初始化器(如果有的話)。

在你的情況下,在方法中進行初始化似乎是合法的,並且從初始化程序調用它,但不幸的是它不起作用。

可能的解決方案:

  • 使性能可選的或隱含展開(氣餒,除非你真的需要他們自選)
  • 初始化用假值的屬性調用reset前:

    init() { 
        self.a = 0 
        self.b = 0 
        self.c = 0 
        self.d = 0 
    
        reset() 
    } 
    

    var a = 0 
    var b = 0 
    var c = 0 
    var d = 0 
    
    init() { 
        reset() 
    } 
    
3

給出a,b,c和d默認值,特別是如果您要立即更改它們。

相關問題