我正在使用 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
它有一个值