替代方式(使用Selector)设置通知观察器

时间:2014-12-12 08:25:49

标签: swift notifications selector addobserver

我已使用以下代码成功设置了通知观察者:

func setupNotification {
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "action:", name: notificationString, object: nil)
}

func action(notification: NSNotification) {
    // Do something when receiving notification
}

但是,我对上面的编码风格不感兴趣,因为我可能会输入或复制/粘贴错误的方法名称action:

所以我尝试以不同的方式addObserverNSNotificationCenter.defaultCenter().addObserver(self, selector: Selector(/* What to pass in here??? */), name: notificationString, object: nil),我不知道在selector: Selector(...)传递什么。

XCode暗示我:Selector(action(notification: NSNotification),但这是非法的。

在目标C中,我可以轻松地在这个阶段选择一种方法,但我不知道如何在Swift中。

你试过这个语法吗?让我知道。

谢谢,

2 个答案:

答案 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会很高兴。