Swift:如何在类中初始化类的实例
我对初始化类中数组的实例时出现的错误感到困惑。下面的注释是xcode 6显示的错误 我创建了一个类。它具有NSMutableArray的实例。我想初始化数组(因此调用self.instancename.init()。如果我不这样做,它就会抱怨。如果我这样做,它就会抱怨 进口基金会Swift:如何在类中初始化类的实例,swift,instance-initializers,Swift,Instance Initializers,我对初始化类中数组的实例时出现的错误感到困惑。下面的注释是xcode 6显示的错误 我创建了一个类。它具有NSMutableArray的实例。我想初始化数组(因此调用self.instancename.init()。如果我不这样做,它就会抱怨。如果我这样做,它就会抱怨 进口基金会 class testclass:NSObject { var list_of_things:NSMutableArray; init (){ // Designated initializer f
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')
}
}
要调用另一个类的初始值设定项,只需如下调用:
self.list_of_things = NSMutableArray()
var list_of_things:NSMutableArray = NSMutableArray()
无需隐式调用init()
函数,它是在将()添加到类名时隐式调用的
也可以在创建属性时对其进行初始化,如下所示:
self.list_of_things = NSMutableArray()
var list_of_things:NSMutableArray = NSMutableArray()
要调用另一个类的初始值设定项,只需如下调用:
self.list_of_things = NSMutableArray()
var list_of_things:NSMutableArray = NSMutableArray()
无需隐式调用init()
函数,它是在将()添加到类名时隐式调用的
也可以在创建属性时对其进行初始化,如下所示:
self.list_of_things = NSMutableArray()
var list_of_things:NSMutableArray = NSMutableArray()
您需要为变量赋值,该变量中没有可调用的
init
:
init () {
self.list_of_things = NSMutableArray()
super.init()
}
还有几点注意:
class TestClass {
var listOfThings: [AnyObject]
init () {
self.listOfThings = []
super.init()
}
}
实际上,如果只想初始化为空数组,甚至不需要实现init或显式指定类型:
class TestClass {
var listOfThings = []
}
您需要为变量赋值,该变量中没有可调用的
init
:
init () {
self.list_of_things = NSMutableArray()
super.init()
}
还有几点注意:
class TestClass {
var listOfThings: [AnyObject]
init () {
self.listOfThings = []
super.init()
}
}
实际上,如果只想初始化为空数组,甚至不需要实现init或显式指定类型:
class TestClass {
var listOfThings = []
}
这不是在NSMutableArray上调用init的方式
class testclass:NSObject {
var list_of_things:NSMutableArray
init (){
self.list_of_things = NSMutableArray()
super.init()
}
}
去掉那些分号!这是什么?上周?在NSMutableArray上不是这样调用init的
class testclass:NSObject {
var list_of_things:NSMutableArray
init (){
self.list_of_things = NSMutableArray()
super.init()
}
}
去掉那些分号!这是什么?上周?端到端回答。没有超类,使用Swift数组,在声明端初始化列表,在
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"
端到端的答案。没有超类,使用Swift数组,在声明端初始化列表,在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"
非常感谢。这回答了我的问题和我脑海中的许多其他问题。我同意分号只是从C和systemVerilog中习得的一种习惯。我应该把我的大脑切换到Python模式,在这里我不使用分号。除了这个:“变量名应该使用CAMEL CASE而不是下划线”——我已经在C中使用了下划线,然后在C++中使用,然后在Obj-C中使用(除非由于Objc运行时而被XXX所忽略)。我将继续在SWIFT.@superarts.org中使用下划线,当然,如果您愿意,您有权使用下划线,但是您将很难与大多数其他开发人员协作,因为绝大多数开发人员将使用camel case。不遵守约定是与他人通信的障碍。Array是Struct,而NSMutableArray是class,您无法实现某些功能。这回答了我的问题和我脑海中的许多其他问题。我同意分号只是从C和systemVerilog中习得的一种习惯。我应该把我的大脑切换到Python模式,在这里我不使用分号。除了这个:“变量名应该使用CAMEL CASE而不是下划线”——我已经在C中使用了下划线,然后在C++中使用,然后在Obj-C中使用(除非由于Objc运行时而被XXX所忽略)。我将继续在SWIFT.@superarts.org中使用下划线,当然,如果您愿意,您有权使用下划线,但是您将很难与大多数其他开发人员协作,因为绝大多数开发人员将使用camel case。不遵守约定是与他人通信的障碍。Array是Struct,而NSMutableArray是class,您无法互换实现某些功能