【问题标题】:Combine and NotificationCenter: Notifications not working [duplicate]合并和通知中心:通知不起作用[重复]
【发布时间】:2020-01-09 15:12:12
【问题描述】:

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


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 模拟器。

有什么建议吗?

【问题讨论】:

    标签: ios swift nsnotificationcenter combine


    【解决方案1】:

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

    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)
    

    或者使用变量:

    private let cancellable: AnyCancellable?
    
    cancellable = NotificationCenter.default
        .publisher(for: .Test)
        .sink(receiveCompletion: { _ in
            print("SOLUTION 1: COMPLETION")
        }, receiveValue: { _ in
            print("SOLUTION 1: VALUE")
        })
    

    【讨论】:

    • 现在可以使用了!谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    相关资源
    最近更新 更多