首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并和NotificationCenter:通知不起作用

合并和NotificationCenter:通知不起作用
EN

Stack Overflow用户
提问于 2020-01-09 23:12:12
回答 1查看 1.3K关注 0票数 2

我写了一个非常简单的应用来测试Combine和NotificationCenter:

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

// SOLUTION 1
NotificationCenter.default
            .publisher(for: .Test)
            .sink(receiveCompletion: { _ in
                print("SOLUTION 1: COMPLETION")
            }, receiveValue: { _ in
                print("SOLUTION 1: VALUE")
            })

// SOLUTION 2
    NotificationCenter.Publisher(center: .default, name: .Test)
        .sink(receiveCompletion: { _ in
            print("SOLUTION 2: COMPLETION")
        }, receiveValue: { _ in
            print("SOLUTION 2: VALUE")
        })

// SOLUTION 3
NotificationCenter.default.addObserver(self, selector: #selector(doSomething), name: .Test, object: nil)

@objc
func doSomething() {
        print("SOLUTION 3: VALUE")
}

// RAISE NOTIFICATION

NotificationCenter.default.post(name: .Test, object: nil)NotificationCenter.default.post(name: .Test, object: nil)

使用Combine不能捕获通知。唯一有效的解决方案是第三种方案,即老式方案。奇怪的是,如果我在Playground中运行相同的代码,它就能工作!

该项目的部署目标是iOS 13。我已经在物理设备和模拟器上执行了该应用程序。我还安装了iOS 13.2.2模拟器。

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2020-01-10 00:04:26

不要忘记将您的可取消实例存储在一个集合或变量中。示例(使用Set):

代码语言:javascript
复制
private var cancellableBag = Set<AnyCancellable>()

NotificationCenter.default
    .publisher(for: .Test)
    .sink(receiveCompletion: { _ in
        print("SOLUTION 1: COMPLETION")
    }, receiveValue: { _ in
        print("SOLUTION 1: VALUE")
    })
    .store(in: &cancellableBag)

或者使用变量:

代码语言:javascript
复制
private let cancellable: AnyCancellable?

cancellable = NotificationCenter.default
    .publisher(for: .Test)
    .sink(receiveCompletion: { _ in
        print("SOLUTION 1: COMPLETION")
    }, receiveValue: { _ in
        print("SOLUTION 1: VALUE")
    })
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59666945

复制
相关文章

相似问题

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