首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift中的NSNotificationCenter addObserver

Swift中的NSNotificationCenter addObserver
EN

Stack Overflow用户
提问于 2014-06-05 07:02:05
回答 4查看 350K关注 0票数 426

如何将Swift中的观察者添加到默认通知中心?我正在尝试移植这行代码,当电池电量变化时,它会发送通知。

代码语言:javascript
运行
复制
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(batteryLevelChanged:) name:UIDeviceBatteryLevelDidChangeNotification object:nil];
EN

回答 4

Stack Overflow用户

发布于 2016-01-27 21:30:19

这样做的一个好方法是使用addObserver(forName:object:queue:using:)方法,而不是Objective-C代码中经常使用的addObserver(_:selector:name:object:)方法。第一个变体的优点是,您不必在方法上使用@objc属性:

代码语言:javascript
运行
复制
    func batteryLevelChanged(notification: Notification) {
        // do something useful with this information
    }

    let observer = NotificationCenter.default.addObserver(
        forName: NSNotification.Name.UIDeviceBatteryLevelDidChange,
        object: nil, queue: nil,
        using: batteryLevelChanged)

如果您愿意,您甚至可以使用闭包而不是方法:

代码语言:javascript
运行
复制
    let observer = NotificationCenter.default.addObserver(
        forName: NSNotification.Name.UIDeviceBatteryLevelDidChange,
        object: nil, queue: nil) { _ in print("") }

您可以稍后使用返回值停止监听通知:

代码语言:javascript
运行
复制
    NotificationCenter.default.removeObserver(observer)

使用这种方法还有另一个好处,那就是它不需要你使用选择器字符串,因为选择器字符串不能被编译器静态检查,所以如果方法被重命名,那么很容易被破坏,但是Swift 2.2和更高版本包含了解决这个问题的#selector expressions

票数 52
EN

Stack Overflow用户

发布于 2016-03-30 16:57:36

在swift 2.2 - XCode 7.3中,我们对NSNotificationCenter使用#selector

代码语言:javascript
运行
复制
 NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(rotate), name: UIDeviceOrientationDidChangeNotification, object: nil)
票数 2
EN

Stack Overflow用户

发布于 2017-03-09 11:22:55

我们也应该删除通知。

例如。

代码语言:javascript
运行
复制
deinit 
{
  NotificationCenter.default.removeObserver(self, name:NSNotification.Name(rawValue: "notify"), object: nil)

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

https://stackoverflow.com/questions/24049020

复制
相关文章

相似问题

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