首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 3中的NSNotifications

Swift 3中的NSNotifications
EN

Stack Overflow用户
提问于 2016-07-11 14:55:03
回答 2查看 7.3K关注 0票数 8

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

我正在做:

代码语言:javascript
复制
NotificationCenter.default().post(name: DidTouchParticleView, object: self.particle as? AnyObject)

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

代码语言:javascript
复制
NotificationCenter.default().addObserver(forName: DidTouchParticleView, 
                                         object: self,
                                         queue: OperationQueue.main(),
                                         using: presentParticleDisplayView(notification:))

在视图控制器的viewDidLoad()中。我确信这个特定的视图控制器是在我点击我的自定义视图时出现的,但是,函数presentParticleDisplayView(notification:)从未被调用过。

此外,DidTouchParticleView在全局范围内定义如下:

代码语言:javascript
复制
let DidTouchParticleView = NSNotification.Name("didTouchParticleView")

这是因为测试版,还是我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-11 15:10:12

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

相反,您调用了错误的方法,addObserver(forName:object:queue:using:),它的工作方式完全不同。

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

代码语言:javascript
复制
let DidTouchParticleView = NSNotification.Name("didTouchParticleView")

那几乎是正确的;应该是

代码语言:javascript
复制
let DidTouchParticleView = Notification.Name("didTouchParticleView")

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

代码语言:javascript
复制
extension Notification.Name {
    static let didTouchParticleView = Notification.Name("didTouchParticleView")
}

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

票数 13
EN

Stack Overflow用户

发布于 2016-07-11 15:04:14

您正在监视自己发布通知(object: self)。您可能是指类似于object: particleaddObserver调用中的object: nil (但请注意确保它是处理程序中的正确粒子)。重新读取此方法的文档,并仔细注意object参数的作用。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38310080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档