我正在尝试使此代码起作用:
class MyWindowController: NSWindowController
{
  let thing: Thing
  convenience init(thing: Thing)
  {
    self.thing = thing
    super.init(windowNibName: NSNib.Name(rawValue: "MyNib"))
  }
}
当然,问题在于便利初始化程序无法init从超类调用。那么,如何初始化自己的thing并且仍然可以调用init(windowNibName:),这本身就是一个便捷的初始化程序?我宁愿不必重新实现自己加载的笔尖,但是如果只能使用指定的初始化程序,该如何避免呢?
根据NSWindowController文档:
您还可以实现一个
NSWindowController子类,以避免要求客户端代码获取相应的笔尖文件名并将其传递给实例化窗口控制器init(windowNibName:)或init(windowNibName:owner:)在实例化窗口控制器时传递。要做到这一点,最好的办法是重写windowNibName返回笔尖的文件名,并通过将实例窗口控制器nil来init(window:)。使用init(window :)指定的初始值设定项可简化对Swift初始值设定项的要求。
您可以将类实现为:
class MyWindowController: NSWindowController
{
    let thing: Thing
    override var windowNibName: NSNib.Name? {
        return NSNib.Name(rawValue: "MyNib")
    }
    init(thing: Thing) {
        self.thing = thing
        super.init(window: nil)
    }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
| 归档时间: | 
 | 
| 查看次数: | 91 次 | 
| 最近记录: |