从Swift中的Super Super Class调用初始化程序?

时间:2015-05-11 18:43:40

标签: ios objective-c swift

我有UITableViewController的子类:

class ClassA : UITableViewController {

    // MARK: Init
    convenience init() {
        self.init(style: .Grouped)
    }

    convenience init(form: FormDescriptor) {
        self.init()
        self.form = form
    }

    override init(style: UITableViewStyle) {
        super.init(style: style)
    }

    override init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        baseInit()
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        baseInit()
    }    
}

我创建了ClassA的子类:

class ClassB : ClassA {

  override init(style: UITableViewStyle) {
    super.init(style: style)
  }

  convenience init() {
    self.init(style: .Grouped)
    self.form = getForm()
  }

  required init(coder aDecoder: NSCoder) {
      fatalError("init(coder:) has not been implemented")
  }
}

我尝试使用ClassB中使用UITableViewController的初始化程序初始化UITableViewStyle。运行代码时,我得到:

  

致命错误:使用未实现的初始化程序init(nibName:bundle:)

如何使用ClassB中的style属性初始化UITableViewController

1 个答案:

答案 0 :(得分:2)

将该代码放入ClassB

override init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}

然后您将能够按如下方式初始化ClassB

let b = ClassB(style: UITableViewStyle.Grouped)