0

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

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),但这是非法的。

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

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

谢谢,

4

2 回答 2

1

选择器的语法是Selector("action:")

于 2014-12-12T08:42:30.827 回答
0

不是您问题的直接答案,但我有一个想法。

在 swift 中,实例方法是将实例作为第一个参数的柯里化函数。假设您有这样的课程。

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就好了。

于 2014-12-12T08:45:34.647 回答