我试着用苹果登录到我的支持iOS12的iOS项目。因为与AuthenticationServices相关的声明只在iOS13中有效,所以我需要使用#available(iOS 13.0, *)...来分隔iOS13或更高版本以及iOS12和blow的代码。
我在区分ASAuthorizationControllerDelegate和iOS12或更低版本时遇到了麻烦。似乎#available(iOS 13.0, *)...只能在方法中使用,但不能直接用于swift文件,因此我不能使我的LoginViewController符合ASAuthorizationControllerDelegate,只能用于iOS13或更高版本。
有什么帮助吗?
extension LoginViewController {
@objc func didTapAppleButton() {
guard #available(iOS 13.0, *) else { return }
let provider: ASAuthorizationAppleIDProvider = .init()
let request = provider.createRequest()
request.requestedScopes = [.fullName, .email]
let authController: ASAuthorizationController = .init(authorizationRequests: [request])
authController.delegate = self
authController.presentationContextProvider = self
authController.performRequests()
}
}
// This does not work.
// -> Error: Declaration is only valid at file scope
if #available(iOS 13.0, *) {
extension LoginViewController: ASAuthorizationControllerDelegate {
public func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
}
public func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
}
}
}发布于 2020-07-22 18:57:58
你需要的是@available,而不是if #available。if #available用于在特定iOS版本上执行特定代码路径。要声明仅在iOS 13上可用的特定类型或扩展,您需要@available。
@available(iOS 13.0, *)
extension LoginViewController: ASAuthorizationControllerDelegate {
public func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
}
public func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
}
}https://stackoverflow.com/questions/63032511
复制相似问题