簡體   English   中英

Swift:如何在一個類中初始化一個類的實例

[英]Swift: How to initialize instance of a class within a class

我對嘗試在類中初始化數組實例時出現的錯誤感到困惑。 下面的注釋是xcode 6顯示的錯誤。

我創建了一個類。 它具有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')
    }
}

您需要為變量分配一個值,該變量中沒有任何東西可以調用init

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

還有一些注意事項:

  1. 您不需要在行尾使用分號(我知道習慣很難打破)
  2. 您不需要從NSObject繼承
  3. 您應該更喜歡使用本機Swift數組(Array)而不是NSMutableArray
  4. 上課應始終以大寫字母開頭
  5. 變量名稱應使用駝峰大小寫而不是下划線

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

class TestClass {
    var listOfThings: [AnyObject]

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

實際上,如果您只想初始化為空數組,則甚至無需實現init或顯式指定類型:

class TestClass {
    var listOfThings = []
}

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

self.list_of_things = NSMutableArray()

不需要隱式調用init()函數,這是在將()添加到類名時隱含的。

您還可以在創建屬性時將其初始化,如下所示:

var list_of_things:NSMutableArray = NSMutableArray()

那不是您在NSMutableArray上調用init的方式。

class testclass:NSObject {

    var list_of_things:NSMutableArray

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

並擺脫那些分號! 這是什么? 上個星期?

端到端答案。 沒有超類,使用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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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