我已使用以下代码成功设置了通知观察者:
func setupNotification {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "action:", name: notificationString, object: nil)
}
func action(notification: NSNotification) {
// Do something when receiving notification
}
但是,我对上面的编码风格不感兴趣,因为我可能会输入或复制/粘贴错误的方法名称action:
。
所以我尝试以不同的方式addObserver
:NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector(/* What to pass in here??? */), name: notificationString, object: nil)
,我不知道在selector: Selector(...)
传递什么。
XCode暗示我:Selector(action(notification: NSNotification)
,但这是非法的。
在目标C中,我可以轻松地在这个阶段选择一种方法,但我不知道如何在Swift中。
你试过这个语法吗?让我知道。
谢谢,
答案 0 :(得分:1)
选择器的语法是Selector("action:")
答案 1 :(得分:0)
不是你问题的直接答案,但我有个主意。
在swift实例中,方法是curried函数,它将实例作为第一个参数。假设你有这样一个类。
class Foo: NSObject {
func bar(notification: NSNotification) {
// do something with notification
}
}
在代码中的某处,您有一个Foo
的实例。
let foo = Foo()
现在您可以将bar
方法作为变量获取,如此
let barFunc = Foo.bar(foo)
现在想象一下,NSNotificationCenter
有一个api,可以让你为它分配函数而不是选择器。
NSNotificationCenter.defaultCenter().addObserverFunction(barFunc, name: "notificationName", object: nil)
虽然我不想使用NSNotificationCenter
但是将来看到这种api会很高兴。