gpt4 book ai didi

swift - 如何使用 '#selector' 将参数传递给方法

转载 作者:可可西里 更新时间:2023-11-01 00:57:17 30 4
gpt4 key购买 nike

我正在尝试将 UIBarButtonItem 作为参数传递,但我收到以下错误:

Argument of '#selector' does not refer to an '@objc' method, property, or initializer

@objc func barClicked( sender: AnyObject) {

}
override func viewDidLoad() {
super.viewDidLoad()
let bar: UIToolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 50))
bar.barStyle = UIBarStyle.default
bar.items = [
UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil),
UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(barClicked(sender: bar.items[0])))]
bar.sizeToFit()
}

还尝试了 #selector(barClicked(sender: bar.items[0] as AnyObject

谢谢

最佳答案

在使用 #selector 时,您永远不会曾经 将参数传递给您所引用的方法。文字。参数将由选择器的执行者传递给方法,在本例中,它是 UIBarButtonItem 的内部工作原理.

要解决这个问题,只需删除参数列表:

#selector(barClicked)

执行选择器时,sender参数很可能包含对第二个 UIBarButtonItem 的引用在工具栏中,因为您将选择器设置为 action第二个UIBarButtonItem .

但是,您似乎故意希望发件人成为第一个 UIBarButtonItem的工具栏。这听起来很违反直觉。你可能在这里做错了什么。但是如果你坚持要传递工具栏的第一项,那么这样做:

// add a new method like this:
func someMethod() { // name this properly!
barClicked(sender: bar.items[0]) // please make bar a class-level variable first.
}

那你可以引用someMethod#selector :

#selector(someMethod)

关于swift - 如何使用 '#selector' 将参数传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43297851/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com