0

我正在使用 WWDC21 中展示的 Swift 延续

我正在尝试将registerForRemoteNotification实现包装在其中

我基本上有以下,我认为它简单明了。

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
        self.activeContinuation?.resume(throwing: error)
        self.activeContinuation = nil
    }

    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        self.activeContinuation?.resume(returning: deviceToken.map { String(format: "%02x", $0) }.joined())
        self.activeContinuation = nil
    }
    
    func fetchDeviceToken() async throws -> String {
        return try await withCheckedThrowingContinuation { continuation in
            self.activeContinuation = continuation
            
            Task {
                await MainActor.run {
                    UIApplication.shared.registerForRemoteNotifications()
                }
            }
        }
    }

事情是这样的:

            Task {
                await MainActor.run {
                    UIApplication.shared.registerForRemoteNotifications()
                }
            }

当上面被调用时,它activateContinuation是 nil,部分原因是它被声明为可选的,但是当单步执行时self.activeContinuation = continuation它有一个值

4

0 回答 0