我想在每次应用程序状态更改时做出react .我在听\.applicationState家出版商的 comments :

UIApplication.shared.publisher(for: \.applicationState)
  .subscribe(on: DispatchQueue.main)
  .sink(receiveCompletion: { completion in
    switch completion {
    case .finished:
      print("finished")
    case .failure:
      print("failure")
    }
  }, receiveValue: { state in
    print("state", state.rawValue)
  })
  .store(in: &cancellables)

然而,这只会触发一次(但不会完成).如果我设置应用程序的后台并重新打开它,它不会发布任何新的值.为什么?

推荐答案

您正在使用的发布器适用于符合KVO的属性.(见Performing Key-Value Observing with Combine)但存档的Key-Value Observing Programming Guide号文件警告我们:

Important:并不是所有的类都符合所有属性的KVO.…通常,Apple提供的框架中的属性只有在文档中这样记录时才符合KVO.

但是notification center可以通知我们这些状态变化,例如didBecomeActiveNotification:

NotificationCenter.default
    .publisher(for: UIApplication.didBecomeActiveNotification)
    .subscribe(on: DispatchQueue.main)
    .sink { completion in
        switch completion {
        case .finished:
            print("finished")
        case .failure:
            print("failure")
        }
    } receiveValue: { notification in
        print("notification", notification)
    }
    .store(in: &cancellables)

或者,只是:

NotificationCenter.default
    .publisher(for: UIApplication.didBecomeActiveNotification)
    .subscribe(on: DispatchQueue.main)
    .sink { notification in
        print("notification", notification)
    }
    .store(in: &cancellables)

请参见Routing Notifications to Combine Subscribers.有关在SWIFT中创建您自己的符合KVO的类型的信息,请参阅Using Key-Value Observing in Swift.

Ios相关问答推荐

带外部笔划的圆形进度视图

设置堆栈视图的所有属性

swift|在具有自定义单元格的多个TableView中没有任何内容

SwiftUI 点击列表内不会触发 Select

从包含 5 个以上项目的自定义选项卡栏的导航视图中删除更多按钮

var name: String 时 print(nil) 和 print(name) 的区别? = 无

具有线性渐变的 SVG textPath 在 Safari 中损坏

SwiftUI - ScrollView 不显示底部文本

我们可以在 Swift 中将 struct 中的 Codable 键设置为不区分大小写吗

iPhone 6 和 6 Plus 媒体查询

Xcode 6 App Store 提交失败并显示您的帐户已经拥有有效的 iOS 分发证书

Watchkit AppIcon - 名为AppIcon的应用图标集没有任何适用的内容

如何在导航栏右侧添加多个 UIBarButtonItem?

在 Xcode 4 中将静态库链接到 iOS 项目

@IBDesignable 崩溃代理

如何动态计算 UILabel 高度?

UITextView 从文本的底部或中间开始

正确使用 Alamofire 的 URLRequestConvertible

使用 swift 3 在 UIView 上添加阴影

在 NSUserDefaults 中保存图像?