等待用户在Swift/SwifUI中给予日历访问权限?

cbwuti44  于 2023-06-21  发布在  Swift
关注(0)|答案(1)|浏览(346)

我正在Swift/SwiftUI中开发一个应用程序,它需要日历访问,并在用户在设置过程中按下按钮时请求此访问。然而,当用户按下按钮以给予访问时,预期的警报显示,但应用程序在后台继续到下一个屏幕。应用程序应保持在同一屏幕上,并在必要时转到错误页面。
这就是我目前为止所尝试的。任何帮助,你可以给予将不胜感激!谢谢!

func getAccess() async {
    eventStore.requestAccess(to: .event) { granted, error in

    }
}

下面的代码包含在按钮中。

Task {
  await getAccess()
  let authStatus = EKEventStore.authorizationStatus(for: .event)
  if authStatus != .authorized {
    withAnimation {
       step = step + 1
    }
  } else {
     withAnimation {
        step = step + 2
     }
  }
}
bxgwgixi

bxgwgixi1#

对于iOS 16及以下版本,您可以转换旧的

func requestAccess(to entityType: EKEntityType,
completion: @escaping EKEventStoreRequestAccessCompletionHandler)

使用CheckedContinuation<T, Error>

func requestAccess(to: EKEntityType = .event) async throws -> Bool{
    return try await withCheckedThrowingContinuation { continuation in
        eventStore.requestAccess(to: to) { granted, error in
            if let error {
                continuation.resume(throwing: error)
            } else {
                continuation.resume(returning: granted)
            }
        }
    }
}

那么你可以用

let isAuthorized = try await requestAccess()

关于iOS 17+
'requestAccess(to:completion:)'在iOS 17.0中已弃用:使用-requestFullAccessToEvents、-requestWriteOnlyAccessToEvents:或-requestFullAccessToReminders:
并发性内置于新方法中。

相关问题