2

我正在使用 Xcode 11.3.1 并尝试实现“使用 Apple 登录”。但是 Xcode 不断给出这个错误。我已经尝试重建,清理我的项目,但似乎没有任何效果。

我想要做的是 - 如果设备有 iOS 13.2 显示“用苹果注册”,否则显示“用苹果登录”按钮,因为 type:signup 在 iOS 13.2 或更高版本中可用。这是我的代码:

@available(iOS 13.0, *)
lazy var appleSignInButton:ASAuthorizationAppleIDButton = {
    let button : ASAuthorizationAppleIDButton
    if #available(iOS 13.2, *){
        button = ASAuthorizationAppleIDButton(type: .signUp, style: .black)
    }else{
        button = ASAuthorizationAppleIDButton(type: .signIn, style:.black)
    }
    button.addTarget(self, action: #selector(appleSignUP), for: .touchDown)
    return button
}()

这是错误信息

4

2 回答 2

2

使用函数而不是计算属性来解决此问题。

@available(iOS 13.0, *)
func getAppleSignInButton() -> ASAuthorizationAppleIDButton {
    let button: ASAuthorizationAppleIDButton
    if #available(iOS 13.2, *) {
        button = ASAuthorizationAppleIDButton(type: .signUp, style: .black)
    }else{
        button = ASAuthorizationAppleIDButton(type: .signIn, style: .black)
    }
    button.addTarget(self, action: #selector(appleSignUP), for: .touchDown)
    return button
}

如果需要,您也可以将其分开并保留惰性 var。

@available(iOS 13.0, *)
lazy var appleSignInButton: ASAuthorizationAppleIDButton = {
    let button = getSignUpOrInButton()
    button.addTarget(self, action: #selector(appleSignUP), for: .touchDown)
    return button
}()

@available(iOS 13.0, *)
private func getSignUpOrInButton() -> ASAuthorizationAppleIDButton {
    if #available(iOS 13.2, *) {
        return ASAuthorizationAppleIDButton(type: .signUp, style: .black)
    } else {
        return ASAuthorizationAppleIDButton(type: .signIn, style: .black)
    }
}
于 2020-02-13T18:45:33.207 回答
0
ASAuthorizationAppleIDButton.ButtonType.signUp

根据 Apple 的文档,确实仅在 iOS 13.2+ 中可用:

SDKs

iOS 13.2+
macOS 10.15.1+
Mac Catalyst 13.2+
tvOS 13.1+

ASAuthorizationAppleIDButton 注册枚举案例

于 2020-02-13T18:29:18.857 回答