Geo*_*rge 5 cocoa subclass nib nswindowcontroller swift
在测试Swift项目中,我是子类NSWindowController.我的NSWindowController子类旨在使用特定的Nib文件.因此,希望在初始化我的窗口控制器时,窗口控制器实例自动加载nib文件.在Objective-C中,这是通过以下方式实现的:
@implementation MyWindowController
- (id)init {
self = [super initWithWindowNibName:"MyWindowNib"]
if (self) {
// whatever
}
return self
}
@end
Run Code Online (Sandbox Code Playgroud)
现在,在Swift中这是不可能的:init()不能调用super.init(windowNibName:),因为后者被声明不是指定的初始化器,而是作为方便的一个NSWindowController.
怎么能在Swift中完成?我没有看到一种直截了当的方式.
PS:我已经看到了关于这个主题的其他问题,但是,只要我能够理解,解决方案都指向通过调用初始化Window Controller init(windowNibName:).请注意,这不是理想的beheaviour.应该使用窗口控制器进行初始化init(),并且应该是窗口控制器本身"拾取"其Nib文件并加载它.
如果你使用init()just来调用super.init(windowNibName:),你可以改为覆盖windowNibName变量.
override var windowNibName: String {
get {
return "MyWindowNib"
}
}
Run Code Online (Sandbox Code Playgroud)
然后应该没有必要弄乱初始化器.
您可以创建自己的便利初始化程序:
override convenience init() {
self.init(windowNibName: "MyWindowNib")
}
Run Code Online (Sandbox Code Playgroud)
相反,您应该选择替换子类中所有指定的初始值设定项,只需委托给super适当的地方即可。授予/sf/answers/1695463311/
| 归档时间: |
|
| 查看次数: |
884 次 |
| 最近记录: |