2016-03-25 19 views
2

假定以下:在初始化程序中使用函數 - Swift?

class A { 
    let x : Int 
    init() { 
     self.x = assign(1) 
    } 
    func assign(y : Int) -> Int { 
     return y 
    } 
} 

這產生一個錯誤。

這是我的問題:有沒有辦法在類初始化程序中調用函數?

編輯:添加錯誤消息:都存儲屬性之前

使用方法調用分配'自我'的初始化

+0

什麼是您遇到的異常/錯誤?看看你得到的實際結果會有所幫助 – konkked

+0

有多種解決方案,但真正的用例會有所幫助。 – Sulthan

回答

1

我認爲這是不是最大的解決方案,但它仍然工作中。

class A { 
     var variable : Int 

     init() { 

      self.variable = A.assign(1) 

     } 

     private class func assign(y : Int) -> Int { 
      return y 
     } 
    } 
+0

它的工作原理,謝謝。出於好奇,爲什麼這個工作,而以前的方法沒有? –

+0

它是一個類函數,這種函數不需要初始化對象或@Sulthan你能深入解釋一下嗎 –

0

你可以使用像出頭:

class A { 
    var x : Int! 
    init() { 
     x = assign(1) 
    } 
    func assign(y : Int) -> Int { 
     return y 
    } 
} 

這種方法的缺點是,如果你訪問x並且將不會被初始化,你會得到一個運行時錯誤。退房this答案。

+0

什麼讓x!在x不工作時工作? –

+0

它可以工作,因爲現在'x'是可選的,所以錯誤不再適用。現在,在所有存儲的屬性被初始化之前,您不使用'self',因爲您不再擁有這些屬性,現在它們是可選項。 – Jelly

1

不能調用實例方法,直到實例初始化(前init完成),但你可以使用使用classstatic關鍵字定義模塊級的功能和type methods

func compute(y: Int) -> Int { 
    return y 
} 

class A { 
    let x: Int 

    static func assign(y: Int) -> Int { 
    return y 
    } 

    init() { 
    x = A.assign(3) + compute(4) 
    } 
} 
相關問題