Swift: как инициализировать экземпляр класса внутри класса
Я сбит с толку ошибками, возникающими при попытке инициализировать экземпляр массива в классе. Комментарии ниже - это ошибки, которые показывает 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 ответа
Вам нужно присвоить значение переменной, в этой переменной нет ничего для вызова init
на:
init () {
self.list_of_things = NSMutableArray()
super.init()
}
Также несколько заметок:
- Вам не нужны точки с запятой в конце строки (я знаю, что эту привычку трудно сломать)
- Вам не нужно наследовать от NSObject
- Вы должны предпочесть использовать нативные быстрые массивы (Array) вместо NSMutableArray
- Классы всегда должны начинаться с заглавных букв
- Имена переменных должны использовать верблюжий регистр вместо подчеркивания
Это будет моя очищенная версия вашего тестового класса:
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()
Это не то, как вы вызываете init в NSMutableArray.
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"