【问题标题】:Calling a function through #selector with parameters通过#selector带参数调用函数
【发布时间】:2018-03-23 23:49:50
【问题描述】:

我想调用一个函数并使用#selector 为其提供参数。但是,我得到了错误:

“'#selector' 的参数不引用 '@objc' 方法、属性或初始化程序”

@objc func changeCrypto(crypto: String) {
    //stuff
}

func constructMenu() {
    let menu = NSMenu()

    menu.addItem(NSMenuItem(title: "Bitcoin", action: #selector(changeCrypto(crypto: "bitcoin")), keyEquivalent: "B"))
    menu.addItem(NSMenuItem(title: "Ethereum", action: #selector(changeCrypto(crypto: "ethereum")), keyEquivalent: "E"))
    menu.addItem(NSMenuItem(title: "Litecoin", action: #selector(changeCrypto(crypto: "litecoin")), keyEquivalent: "L"))
    menu.addItem(NSMenuItem.separator())
    menu.addItem(NSMenuItem(title: "Quit It", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q"))

    statusItem.menu = menu
}

【问题讨论】:

  • 我不知道swift,但我猜是因为你实际上是在执行changeCrypto,所以你传递的是changeCrypto返回值而不是比changeCrypto 本身
  • 在您的问题中发布完整而准确的错误消息。
  • @rmaddy 这是完整的错误信息
  • @JDB 不,这根本不是问题。
  • 您应该从错误中查看these search results

标签: swift cocoa nsmenuitem


【解决方案1】:

我修好了!我将其更改为以下..

@objc func changeCrypto(_ sender: NSMenuItem) {
//Here I call the title of the Menu Item pressed
print(sender.title)
}

func constructMenu() {
let menu = NSMenu()

menu.addItem(NSMenuItem(title: "Bitcoin", action: #selector(changeCrypto(_:)), keyEquivalent: "B"))
menu.addItem(NSMenuItem(title: "Ethereum", action: #selector(changeCrypto(_:)), keyEquivalent: "E"))
menu.addItem(NSMenuItem(title: "Litecoin", action: #selector(changeCrypto(_:)), keyEquivalent: "L"))
menu.addItem(NSMenuItem.separator())
menu.addItem(NSMenuItem(title: "Quit It", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q"))

statusItem.menu = menu
}

【讨论】:

    猜你喜欢
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多