Swift中的NSNotifications 3

You*_*wad 8 beta nsnotifications ios swift3

新通知目前是否在Swift 3中有效?

我在做:

NotificationCenter.default().post(name: DidTouchParticleView, object: self.particle as? AnyObject)
Run Code Online (Sandbox Code Playgroud)

在自定义视图中touchesBegan(),我需要将particle对象发送到视图控制器(如果有).所以我这样做:

NotificationCenter.default().addObserver(forName: DidTouchParticleView, 
                                         object: self,
                                         queue: OperationQueue.main(),
                                         using: presentParticleDisplayView(notification:))
Run Code Online (Sandbox Code Playgroud)

在视图控制器中viewDidLoad().我确定那个特定的视图控制器是我点击我的自定义视图时显示的那个,但是,该函数presentParticleDisplayView(notification:)从未被调用过.

此外,DidTouchParticleView全局定义如下:

let DidTouchParticleView = NSNotification.Name("didTouchParticleView")
Run Code Online (Sandbox Code Playgroud)

这是由于测试版,还是我做错了什么?

mat*_*att 13

听起来您可能打算调用addObserver(_:selector:name:object:),其中第二个参数消息(the selector:)被发送到第一个参数(目标).

相反,你正在调用错误的方法addObserver(forName:object:queue:using:),它的工作方式完全不同.

另外,关于你问题的第二部分:

let DidTouchParticleView = NSNotification.Name("didTouchParticleView")
Run Code Online (Sandbox Code Playgroud)

这是正确的(差不多); 它应该是

let DidTouchParticleView = Notification.Name("didTouchParticleView")
Run Code Online (Sandbox Code Playgroud)

所有通知名称现在都是Notification.Name实例.正确的方法是说:

extension Notification.Name {
    static let didTouchParticleView = Notification.Name("didTouchParticleView")
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以.didTouchParticleView在整个代码中引用通知的名称.