Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了可可 – 将Swift和init(windowNibName)中的NSWindowController子类化大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我试图在Swift中启动一个基于Cocoa项目的新文档,并想创建一个NSWindowController的子类(如Apple的文档应用指南中所推荐的)。在ObjC中,你将创建一个NSWindowController子类的实例,发送initWithWindowNibName:消息,并相应地实现,调用superclasses方法。 在Swift中,init(windowNibName)只能作为一个方便
我试图在Swift中启动一个基于Cocoa项目的新文档,并想创建一个NSWindowController的子类(如Apple的文档应用指南中所推荐的)。在ObjC中,你将创建一个NSWindowController子类的实例,发送initWithWindowNibName:消息,并相应地实现,调用superclasses方法

在Swift中,init(windowNibName)只能作为一个便的初始化器,NSWindowController的指定的初始化器是init(window),它显然需要我在一个窗口中传递。

我不能调用super.init(windowNibName)从我的子类,因为它不是指定的初始化,所以我显然必须实现方便init(windowNibName),这反过来需要调用self.init(window)。但如果我有我的nib@L_450_10@,如何访问nib@L_450_10@的窗口发送到该初始化程序?

你需要覆盖NSWindowController(init(),init(window)和init(coder))的所有三个初始化器,或者不覆盖它们,在这种情况下,你的子类将自动继承init(windowNibName)你将能够使用超类的方便初始化构造它:
// this overrides none of designated initializers
class MyWindowController: NSWindowController {
    override func windowDidLoad() {
        super.windowDidLoad()
    }
}

// this one overrides all of them
//
// AwkWARDly enough,I see only two initializers 
// when viewing `NSWindowController` source from Xcode,// but I have to also override `init()` to make these rules apply.
// Seems like a bug.
class MyWindowController: NSWindowController
{
    init()
    {
        super.init()
    }

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

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

    override func windowDidLoad() {
        super.windowDidLoad()
    }
}

// this will work with either of the above
let mwc: MyWindowController! = MyWindowController(windowNibName: "MyWindow")

这在语言指南中的“初始化/自动初始化器继承”中介绍:

大佬总结

以上是大佬教程为你收集整理的可可 – 将Swift和init(windowNibName)中的NSWindowController子类化全部内容,希望文章能够帮你解决可可 – 将Swift和init(windowNibName)中的NSWindowController子类化所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。