自定义NSWindowController子类

时间:2014-08-19 10:30:54

标签: cocoa swift

我在Mac应用程序中一直在玩Swift。

我一直在尝试添加一个非可选的实例变量,但好像我必须重写两个init方法。我最终得到的代码(编译)看起来像这样:

class CustomWindowController: NSWindowController {
  var items: [Int]

  required init(coder: NSCoder!) {
    items = [1, 2, 3]
    super.init(coder: coder)
  }

  override init(window: NSWindow!) {
    items = [1, 2, 3]
    super.init(window: window)
  }
}

我试图抽象出items初始化,但它不会编译,因为“`self在super init call之前使用”。这就是我试过的:

class CustomWindowController: NSWindowController {
  var items: [Int]

  required init(coder: NSCoder!) {
    setup()
    super.init(coder: coder)
  }

  override init(window: NSWindow!) {
    setup()
    super.init(window: window)
  }

  func setup() {
    items = [1, 2, 3]
  }
}

我有点困惑。这些是我的问题:

  1. 为什么我必须覆盖两个指定的初始化程序?我以为通常有一个?
  2. overriderequired之间的区别是什么?为什么每个初始化者需要不同的?
  3. 有没有办法抽象初始化代码?

1 个答案:

答案 0 :(得分:1)