NS在Swift 3中的通知

新通知目前不在Swift 3中工作吗? 我在做:

NotificationCenter.default().post(name: DidTouchParticleView, object: self.particle as? AnyObject) 

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

 NotificationCenter.default().addObserver(forName: DidTouchParticleView, object: self, queue: OperationQueue.main(), using: presentParticleDisplayView(notification:)) 

在视图控制器的viewDidLoad()中。 我确定那个特定的视图控制器是当我点击我的自定义视图时呈现的,但是,函数presentParticleDisplayView(notification:)从来没有被调用过。

另外, DidTouchParticleView是这样定义的:

 let DidTouchParticleView = NSNotification.Name("didTouchParticleView") 

这是由于testing版,或者我做错了什么?

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

相反,你正在调用错误的方法, addObserver(forName:object:queue:using:) ,它的工作方式很不一样。

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

 let DidTouchParticleView = NSNotification.Name("didTouchParticleView") 

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

 let DidTouchParticleView = Notification.Name("didTouchParticleView") 

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

 extension Notification.Name { static let didTouchParticleView = Notification.Name("didTouchParticleView") } 

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

你正在看自己发布通知( object: self )。 你可能是指object: particle或可能的object: niladdObserver调用中的addObserver (但要小心,以确保它是处理程序中的正确的粒子)。 重新阅读这个方法的文档,并仔细注意object参数的用途。

请注意,这个版本的addObserver返回一个观察者对象。 您必须存储它,以便您稍后可以使用removeObserver调用它。