通过#selector带参数调用函数

问题描述 投票:0回答:2

我想调用一个函数并使用

#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 cocoa nsmenuitem
2个回答
2
投票

我修好了!我把它改为以下..

@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
}

0
投票
class MenuItemForCrypto: NSMenuItem {
    enum coin {
        case bitcoin, ethereum, litecoint, nameItCoin
    }
    var name:coin?
}

...

let b = NSMenuItem(title: "Bitcoin", action: #selector(changeCrypto), keyEquivalent: "B")
b.name = .bitcoin
menu.addItem(b)
...

@objc func changeCrypto(_ sender: MenuItemForCrypto) {
    if sender.name = .bitcoin {
        print("It is Bitcoin. Go buy it!")
    }
}


© www.soinside.com 2019 - 2024. All rights reserved.