首页 > 解决方案 > 斯威夫特:尝试使用闭包而不是#selector但不起作用

问题描述

我正在尝试使用闭包而不是选择器,但它不起作用。打印不工作你能帮我吗

我的自定义操作:

final class Action: NSObject {

    private let _action: () -> ()

    init(action: @escaping () -> ()) {
        _action = action
        super.init()
    }

    @objc func action() {
        _action()
    }

}

使用:

let menu = NSMenu()

let action = Action { print("My action") }
menu.addItem(NSMenuItem(title: "Delete", action: #selector(action.action), keyEquivalent: ""))

tableView.menu = menu

当我单击菜单时,删除选项不打印,为什么它不起作用?

标签: swiftcocoaclosures

解决方案


尝试为NSMenuItem. 根据 Apple 文档,这似乎没有包含在初始化程序中,但可以在之后设置。

let menu = NSMenu()

let action = Action { print("My action") }
var menuItem = NSMenuItem(title: "Delete", action: #selector(action), keyEquivalent: "")
menuItem.target = action // This refers to the action instance
menu.addItem(menuItem)

tableView.menu = menu

推荐阅读