我在Objective C中有一个名为“A”的自定义UITableViewController类,并在Swift中创建了一个名为“B”的子类 .

类“A”有两个初始化器,一个简单的“init”和“initWithCoder”方法 . 我在类“B”中创建了一个其他初始化器,就像“init(stuff:Stuff)”一样,它调用了一个super.init()

现在看来,当调用super.init()并且类“A”init调用它自己的[super init]时,它试图在类“B”上调用UITableViewController的默认初始值设定项 .

问题是,如果我实现了缺少的方法,我必须初始化存储在类“B”中的本地“stuff”对象,并且它已经由我制作的自定义init设置 .

调用默认的TableView inits是否正常?

如果调用其他方法,我应该如何构建我的类以保留“stuff”对象?

//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)
    }
    */
}

编辑:好的,所以我学习了初始化器继承如何工作,如果我想使用一个,我必须覆盖所有 . 不过,我不明白他们为什么在一个init之后从父类调用它们?