我在Objective C中有一个名为" A"的自定义UITableViewController类,并在Swift中创建了一个子类,名为" B"。
Class" A"有两个初始化程序,一个简单的" init" " initWithCoder"方法。 我在课堂上制作了另一个初始化器" B",就像" init(东西:东西)"它调用super.init()
现在看来,当super.init()被调用并且类#34; A" init调用它自己的[super init]它试图在类" B"上调用UITableViewController的默认初始化器。
问题是,如果我实现了缺少的方法,我必须初始化本地"东西"存储在类" B"中的对象并且它已经由我制作的自定义初始化设置。
调用默认的TableView inits是否正常?
我应该如何建立我的课程以保持"东西"对象,如果其他方法调用?
//Abstract example
//Obj-c class
@interface A : UITableViewController
@end
@implementation A
- (instancetype) initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
}
return self;
}
- (instancetype)init {
self = [super init];
// This is where the tableview inits called on class B
if (self) {
}
return self;
}
@end
//Swift class
class B : A {
var stuff : Stuff
init(stuff : Stuff) {
self.stuff = stuff
super.init()
}
/*
// It works if these methods are here, but I must initialize the "stuff"
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
self.stuff = Stuff()
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
override init(style: UITableViewStyle) {
self.stuff = Stuff()
super.init(style: UITableViewStyle.Plain)
}
*/
}
编辑: 好的,所以我学习了初始化器继承如何工作,如果我想使用一个,我必须覆盖所有。尽管如此,我还是不明白他们为什么在一次初始化后从父类调用它们?