当前位置 : 主页 > 手机开发 > 其它 >

可可 – 斯威夫特的NSWindowController.使用Nib进行子类化和初始化

来源:互联网 收集:自由互联 发布时间:2021-06-11
在测试 Swift项目中,我是NSWindowController的子类.我的NSWindowController子类旨在使用特定的Nib文件.因此,希望在初始化我的窗口控制器时,窗口控制器实例自动加载nib文件.在Objective-C中,这是通过
在测试 Swift项目中,我是NSWindowController的子类.我的NSWindowController子类旨在使用特定的Nib文件.因此,希望在初始化我的窗口控制器时,窗口控制器实例自动加载nib文件.在Objective-C中,这是通过以下方式实现的:

@implementation MyWindowController

- (id)init {
    self = [super initWithWindowNibName:"MyWindowNib"]
    if (self) {
        // whatever
    }
    return self
}

@end

现在,在Swift中这是不可能的:init()不能调用super.init(windowNibName :),因为后者被声明不是指定的初始化器,而是作为NSWindowController的方便.

怎么能在Swift中完成?我没有看到一种直截了当的方式.

P.S.:我已经看到了关于这个主题的其他问题,但是,只要我能够理解,解决方案都指向通过调用init(windowNibName :)初始化Window Controller.请注意,这不是理想的beheaviour.应该用init()初始化Window Controller,它应该是Window Controller本身“拿起”它的Nib文件并加载它.

如果使用init()只调用super.init(windowNibName :),则可以改为覆盖windowNibName变量.

override var windowNibName: String  {
    get {
        return "MyWindowNib"
    }
}

然后应该没有必要弄乱初始化器.

网友评论