Swift:如何在类中初始化类的实例

时间:2014-06-07 17:31:29

标签: swift instance-initializers

我对尝试在类中初始化数组实例时出现的错误感到困惑。以下评论是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')
    }
}

4 个答案:

答案 0 :(得分:4)

您需要为变量赋值,该变量中没有任何内容可以调用init

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

还有一些注意事项:

  1. 你不需要在行尾添加分号(我知道习惯很难打破)
  2. 您不需要继承NSObject
  3. 您应该更喜欢使用本机swift数组(Array)而不是NSMutableArray
  4. 课程应始终以大写字母开头
  5. 变量名称应使用驼峰大小写而不是下划线
  6. 这将是我的测试类的清理版本:

    class TestClass {
        var listOfThings: [AnyObject]
    
        init () {
            self.listOfThings = []
            super.init()
        }
    }
    

    实际上,如果你只想初始化为一个空数组,你甚至不需要实现init或明确指定类型:

    class TestClass {
        var listOfThings = []
    }
    

答案 1 :(得分:2)

要调用另一个类的初始值设定项,只需将其称为:

self.list_of_things = NSMutableArray()

没有必要隐式调用init()函数,在将类()添加到类名时隐含了这一功能。

您还可以在创建属性时对其进行初始化,如下所示:

var list_of_things:NSMutableArray = NSMutableArray()

答案 2 :(得分:0)

这不是你如何在NSMutableArray上调用init。

class testclass:NSObject {

    var list_of_things:NSMutableArray

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

摆脱那些分号!这是什么?上周?

答案 3 :(得分:0)

端到端的答案。没有超类,使用Swift数组,在声明端初始化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"
相关问题