在 Swift 中停止收听 NSEvent

Stop listening to NSEvent in Swift

我正在尝试让 NSEvent 停止监听本地事件。有没有办法在创建事件后访问它?(这是我在 removeEvent 中尝试失败的方法)

    override func viewDidLoad() {
        super.viewDidLoad()

        NSEvent.addLocalMonitorForEvents(matching: .keyDown, handler: sayHello(event:))
    }

    func sayHello(event: NSEvent) -> NSEvent {
        print("Welcome")
        return event
    }
    
    @IBAction func removeEvent(_ sender: NSButton) {
        let event  = NSEvent.addLocalMonitorForEvents(matching: .keyDown, handler: sayHello(event:))

        NSEvent.removeMonitor(event)
    }

只需创建对事件监视器的引用,将实例 属性 添加到视图控制器并使用按钮操作将其删除:

var monitor: Any?

func sayHello(_ event: NSEvent) -> NSEvent {
    print(#function)
    return event
}

override func viewDidLoad() {
    super.viewDidLoad()
    monitor = NSEvent.addLocalMonitorForEvents(matching: .keyDown, handler: sayHello)

}

@IBAction func removeEvent(_ sender: NSButton) {
    if let monitor = monitor {
        NSEvent.removeMonitor(monitor)
    }
}