我尝试将观察者添加到我的 Swift 3 应用程序中,但是当我想设置应该从观察者调用的方法时,我得到以下错误:
键入' ViewController'没有会员' btnShowMorePressed'
函数btnShowMorePressed
直接在addOberservers
函数下声明。
func addObservers(){
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.btnShowMorePressed(_:)), name: btn1TappedDone, object: nil)
}
func btnShowMorePressed(sender: NSNotification){
print("btnShowMorePressed was called.")
}
我试图清理项目(Product - > Clean),但仍然给我错误。添加观察者我做错了什么?
答案 0 :(得分:4)
应该是:
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.btnShowMorePressed), name: btn1TappedDone, object: nil)
是的,它确实识别出sender
方法的正确btnShowMorePressed(sender: NSNotification)
。
答案 1 :(得分:0)
试试这个
NotificationCenter.default.addObserver(self, selector: #selector(self.btnShowMorePressed(sender:)), name: btn1TappedDone, object: nil)
答案 2 :(得分:0)
如果您的代码中只有一个btnShowMorePressed(sender: NSNotification)
方法,则可以使用:
NotificationCenter.default.addObserver(self, selector: #selector(btnShowMorePressed), name: btn1TappedDone, object: nil)
但是如果你有相同的方法名但有不同的参数,那么应该这样使用:
NotificationCenter.default.addObserver(self, selector: #selector(btnShowMorePressed(sender:)), name: btn1TappedDone, object: nil)
对于以下情况中的实例,您无法使用第一种方式,因为您得到了" Ambiguous use of 'btnShowMorePressed'
"错误:
func btnShowMorePressed(sender: NSNotification){
print("btnShowMorePressed was called.")
}
func btnShowMorePressed(parameter: String){
print("btnShowMorePressed was called.")
}
我总是使用第二种方式,因为我更清楚。
答案 3 :(得分:0)
我认为你对如何将选择器传递给方法感到很困惑。
有一条简单的规则需要记住,
当您引用同一个班级中的某个方法时,只需撰写
#selector(
,然后是方法名称和)
。
就这么简单!
只有在想要引用类之外的方法时,才会附加类名。
所以在这里,它将是#selector(btnShowMorePressed)
完整代码:
func addObservers(){
NotificationCenter.default.addObserver(self, selector: #selector(btnShowMorePressed), name: btn1TappedDone, object: nil)
}
func btnShowMorePressed(sender: NSNotification){
print("btnShowMorePressed was called.")
}