从objc类初始化swift子类

时间:2014-09-16 17:42:25

标签: ios objective-c swift

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

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

0 个答案:

没有答案