2014-06-07 90 views
1

我對在嘗試初始化一個類中的一個數組的實例時產生的錯誤感到困惑。下面的評論是xcode 6顯示的錯誤。Swift:如何在一個類中初始化一個類的實例

我創建了一個類。它有NSMutableArray的實例。我想初始化數組(因此調用self.instancename.init())。它抱怨,如果我不這樣做。它如果我這樣抱怨。

進口基金會

class testclass:NSObject { 

    var list_of_things:NSMutableArray; 

    init(){ // Designated initializer for 'testclass' cannot delegate (swith self.init); 
       // did you means this to be a convenience initializer? 
     self.list_of_things.init(); 
       // 'init' can only refer to the initializers of 'self' or 'super' 
     super.init() 
       // Initializer cannot both delegate ('self.init') and chain to a superclass 
       // initializer ('super.init') 
    } 
} 

回答

2

要調用另一個類的初始化,你只需調用它像這樣:

self.list_of_things = NSMutableArray() 

沒有必要隱式調用init()功能,它加入了當的暗示()到類名稱。

你也可以當你創建你的財產進行初始化,像這樣:

var list_of_things:NSMutableArray = NSMutableArray() 
4

您需要分配一個值的變量,沒有什麼是變量調用init上:

init() { 
    self.list_of_things = NSMutableArray() 
    super.init() 
} 

另外幾個注意事項:

  1. 你並不需要在線路末端分號(我知道這種習慣是很難打破)
  2. 你並不需要從NSObject的繼承
  3. 你應該更喜歡使用本地SWIFT陣列(陣列),而不是NSMutableArray的
  4. 類應該始終以大寫字母
  5. 變量名開始應使用大小寫混合,而不是強調

這將是你的測試類的我清理版本:

class TestClass { 
    var listOfThings: [AnyObject] 

    init() { 
     self.listOfThings = [] 
     super.init() 
    } 
} 

而實際上,如果你只是想初始化爲空數組,你甚至都不需要明確地執行init或指定類型:

class TestClass { 
    var listOfThings = [] 
} 
+0

謝謝。這回答了我的問題和我腦海中的其他一些問題。我同意分號只是從C和systemVerilog中挑選出來的一種習慣。我應該把我的大腦切換到不使用分號的Python模式。 –

+0

除了這一個:「變量名稱應該使用駱駝大小寫,而不是下劃線」 - 我已經在C中使用下劃線,然後在C++中使用,然後在Obj-C中使用(除非由於objc運行時而導致initWithXXX)。我將繼續在SWIFT中使用它。 –

+1

@superarts.org,如果你願意,你當然有權使用下劃線,但是你將很難與大多數其他開發者合作,因爲絕大多數人會使用駱駝案例。不遵循以下約定是與他人溝通的障礙。 – drewag

0

這不是你如何調用上的NSMutableArray初始化。

class testclass:NSObject { 

    var list_of_things:NSMutableArray 

    init(){ 
     self.list_of_things = NSMutableArray() 
     super.init() 
    } 
} 

,擺脫這些分號!這是什麼?上個星期?

0

端到端的答案。沒有超類,使用Swift數組,在聲明端init_list_of_things,init()沒有超類初始化。

class testClass { 

    var list_of_things = [] 

    init() { 
    } 
} 

126> var abc = testClass() 
abc: testClass = { 
    list_of_things = @"0 objects" 
} 
127> abc.list_of_things 
$R55: __NSArrayI = @"0 objects"