使用Amplify Auth遇Extra trailing closure错误,求纯Amplify解决方案
解决Amplify Auth调用signIn/resetPassword时的"Extra trailing closure passed in call"错误
你遇到的错误是因为Amplify Swift SDK v2+版本已全面切换到Swift async/await异步模型,移除了旧版本支持的闭包回调参数,你原来的代码是基于旧版本SDK的闭包写法,因此编译器判定你传递了多余的尾随闭包。
解决方案一:使用async/await重构(推荐,符合现代Swift异步规范)
直接将认证方法改为async/await风格,这是Amplify v2+推荐的用法:
import Amplify class Auth { var email: String? var password: String? // 登录 - async/await版本 func login(email: String, password: String) async throws -> String { let signInResult = try await Amplify.Auth.signIn(username: email, password: password) guard signInResult.isSignedIn else { throw AuthError.loginFailed("登录未完成") } return "Success" } // 找回密码 - async/await版本 func forgotPassword(email: String) async throws -> String { let _ = try await Amplify.Auth.resetPassword(for: email) return "密码重置验证码已发送至 \(email)" } } // 自定义认证错误类型,方便统一处理 enum AuthError: Error { case loginFailed(String) }
在UIKit中调用时,通过Task启动异步任务,完成后切回主线程更新UI:
let authManager = Auth() // 调用登录方法 Task { do { let message = try await authManager.login(email: "your@email.com", password: "yourPassword") DispatchQueue.main.async { // 更新UI,比如弹出成功提示 print(message) } } catch { DispatchQueue.main.async { // 展示错误信息 print("登录失败:\(error.localizedDescription)") } } }
解决方案二:保留completion闭包风格
如果需要继续使用闭包回调,可以用Task包裹async/await调用,将异步结果转成闭包回调:
import Amplify class Auth { var email: String? var password: String? // 登录 - 保留completion闭包 func login(email: String, password: String, completion: @escaping (String?) -> Void) { Task { do { let signInResult = try await Amplify.Auth.signIn(username: email, password: password) completion(signInResult.isSignedIn ? "Success" : "登录未完成") } catch { completion("登录失败:\(error.localizedDescription)") } } } // 找回密码 - 保留completion闭包 func forgotPassword(email: String, completion: @escaping (String?) -> Void) { Task { do { try await Amplify.Auth.resetPassword(for: email) completion("密码重置验证码已发送至 \(email)") } catch { completion("密码重置失败:\(error.localizedDescription)") } } } }
补充说明
- 确认你的Podfile中引入的是Amplify v2+版本:
pod 'Amplify' pod 'AmplifyPlugins/AWSCognitoAuthPlugin' - 不建议降级到v1版本,因为v1已停止维护,不再接收安全更新和功能迭代。
内容的提问来源于stack exchange,提问作者Gagana Ananda
相关产品推荐
相关产品推荐

