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: nil
在addObserver
调用中的addObserver
(但要小心,以确保它是处理程序中的正确的粒子)。 重新阅读这个方法的文档,并仔细注意object
参数的用途。
请注意,这个版本的addObserver
返回一个观察者对象。 您必须存储它,以便您稍后可以使用removeObserver
调用它。