在SwiftUI中未触发onReceive

时间:2019-12-27 00:13:17

标签: ios swift swiftui combine

当我处理用户拒绝通知的情况时,不会触发onReceive块。如果用户接受提示提示,则可以正常工作。任何帮助,将不胜感激。以下是必要的代码段:

import SwiftUI

struct UIView: View {
    @ObservedObject var loginViewModel = LogInViewModel()
    ...
    var body: some View {
        VStack {
            ...
            Button(action: {
                UNUserNotificationCenter.current().requestAuthorization(options: [ .alert, .badge, .sound ]) { (success, error) in
                        if error == nil {
                            DispatchQueue.main.async {
                                if success {
                                    UIApplication.shared.registerForRemoteNotifications()
                                } else {
                                    self.loginViewModel.loginCall(...)
                                }
                            }
                        }
                    }
            }) {
                ...
            }.onReceive(loginViewModel.success) {
                print("Login successful!") // <- This doesn't get called if a user doesn't allow the notifications
            }
            ...
        }
    }
}

import Combine

class LogInViewModel: ObservableObject {
    var success = PassthroughSubject<Void, Never>()
    ...
    func loginCall(...) {
        async API call here { (result: Result<..., ...>) in
            if case .success(...) = result {
                DispatchQueue.main.async {
                    self.success.send()
                }
            }
        }
    }
}

0 个答案:

没有答案