Swift SwiftUI上でUIKit使用、アプリバッググランド遷移をUIKit側に通知、Combineにしてみた

記事「Swift SwiftUI上でUIKit使用、アプリバッググランド遷移をUIKit側に通知」をCombine対応

SwiftUI側

前回記事から変わらず。

import SwiftUI

struct MainView: View {    
    var body: some View {
        ExampleView()
            .onAppear() {
                RefillData.loadRefillImage()
            }
            .onChange(of: scenePhase, perform: { value in
                            switch(value) {
                            case .active:
                                print("active")
                            case .background:
                                print("background")
                                NotificationCenter.default.post(name: .aplBackGround, object: nil)
                            case .inactive:
                                print("inactive")
                            @unknown default:
                                print("default")
                            }
                        })
    }
}

struct MainView_Previews: PreviewProvider {
    static var previews: some View {
        MainView()
    }
}

extension Notification.Name {
   static let aplBackGround = Notification.Name("aplBackGround")
}

UIKit側

・NotificationCenter.default.publisher().sink()に変更
・「private var cancellable: AnyCancellable?」ローカル変数にすると動きません

class ExampleController: UIViewController {
:
:
    private var cancellable: AnyCancellable?
:
:
    override func viewDidLoad() {
        super.viewDidLoad()

        self.cancellable = NotificationCenter.default.publisher(for: .aplBackGround, object: nil).sink() { notification in
            print(#function + ":to BackGround.")
        }
    }
:
:

Swift

Posted by shi-n