Swift 未调用协议中的函数

Swift function in protocol not called

函数 windowDidChangeOcclusionState 从未被调用。

class MainWindow: NSWindowController, CloseWindowWhenNotFocused {

    static let shared = MainWindow()
    convenience init() {
    let hostingController = NSHostingController(rootView: DownloadMainView.shared)

    let window = NSWindow(contentViewController: hostingController)
    window.setContentSize(NSSize(width: 800, height: 400))
    window.title = "MainWindow"
    self.init(window: window)

    self.window?.delegate = self
    self.window?.center()

}

}

protocol CloseWindowWhenNotFocused: NSWindowDelegate{ }

extension CloseWindowWhenNotFocused where Self : NSWindowController{

func windowDidChangeOcclusionState(_ notification: Notification) {
    print(#function)
}

}

扩展不能覆盖方法。你想做的事是不可能的。特别是,您无法可靠地向符合协议的每个类型添加可选的委托回调。可以使类型符合模块中的协议,而不是它们在其中定义的协议。没有可靠的方法可以做到这一点。