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