【问题标题】:Swift override init() in class subclassed from Objective-CSwift 在从 Objective-C 子类化的类中覆盖 init()
【发布时间】:2020-01-09 18:00:08
【问题描述】:

我有一个 Objective-C 类,这里是它的init()

- (id)init
{
    self = [super initWithNibName:@"xxxViewController" bundle:nil];
    if (self)
    {

    }
    return self;
}

我有一个 Swift 类,它是它的子类。 如何覆盖 Swift 类中超类的init?我想将initWithNibName 移到 Swift 类中。

这是我尝试过的 Swift 类中的init

init() {
    super.init()
}

我得到错误:

必须调用超类的指定初始化器

【问题讨论】:

标签: objective-c swift


【解决方案1】:

由于init() 不是指定初始化器(在这种情况下,initWithNibName:bundle: 是),我们需要让编译器知道它实际上是一个指定初始化器。我们可以通过将属性附加到标题中的声明(在最后一个属性之后,但在分号之前)来做到这一点:

@interface MyClass : Superclass
- (instancetype)init NS_DESIGNATED_INITIALIZER;
@end

【讨论】:

    猜你喜欢
    • 2014-12-04
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 2015-03-28
    相关资源
    最近更新 更多