首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展NotificationCenter

扩展NotificationCenter
EN

Stack Overflow用户
提问于 2018-12-20 19:52:05
回答 2查看 124关注 0票数 1

我正在尝试为NotificationCenter编写一个扩展

我发现它的语法有点"boilerplatey“,我想提供一个简单的扩展来简化发布和观察。

我可以像这样调度一个事件

代码语言:javascript
复制
NotificationCenter.dispatch(key: <#T##String#>, payload: <#T##[String : String]#>)

然而,我想以类似的方式观察一个事件。

我正在尝试创建像这样的东西

代码语言:javascript
复制
NotificationCenter.observe(key: <#T##String#>, handler: <#T##() -> Void#>)

然而,这是不正确的。我不确定我如何处理应该在观察时触发的选择器函数的传递?

到目前为止,这是我的尝试。

代码语言:javascript
复制
extension NotificationCenter {
    static func dispatch(key: String, payload: [String: String] = [:]) {
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: key), object: nil, userInfo: payload)
    }
    static func observe(key: String, handler: ()->Void) {
        NotificationCenter.default.addObserver(
            self, selector: handler, name: NSNotification.Name(rawValue: key), object: nil
        )
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-20 20:10:09

听起来你需要这样的东西

代码语言:javascript
复制
extension NotificationCenter {
    static func dispatch(key: String, payload: [String: String] = [:]) {
        self.default.post(name: NSNotification.Name(rawValue: key), object: nil, userInfo: payload)
    }
    static func observe(key: String, handler: @escaping (Notification) -> Void) {
        self.default.addObserver(forName: NSNotification.Name(rawValue: key), object: nil, queue: .main, using: handler)
    }
}
票数 0
EN

Stack Overflow用户

发布于 2018-12-20 20:02:11

您可以使用类似以下内容:

代码语言:javascript
复制
extension NotificationCenter {

    class func observe(name: NSNotification.Name, handler: @escaping (Notification) -> Void) {
        self.default.addObserver(forName: name, object: nil, queue: .main, using: handler)
    }

}

然后你可以像这样使用它:

代码语言:javascript
复制
NotificationCenter.observe(name: UIResponder.keyboardDidShowNotification) { notification in
    // do something
}

不过,你绝对应该在https://developer.apple.com/documentation/foundation/notificationcenter/1411723-addobserver上查看有关取消注册观察的信息。

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

https://stackoverflow.com/questions/53868171

复制
相关文章

相似问题

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