如何在Swift中提取AWS Lambda登录接口返回的用户ID响应数据
解决iOS Swift中提取Lambda响应体用户ID的问题
首先看你当前的Swift代码,有个关键问题:你用Alamofire发起请求后,又在success分支里重复用URLSession发起了一次相同的请求,这不仅冗余,还导致你没正确处理Alamofire返回的原始响应数据。我们可以简化代码,直接从Alamofire的响应中提取用户ID,和Android端的逻辑保持一致。
修正后的代码示例
func callingLoginAPI(login: LoginModel, completionHandler: @escaping (Bool, String?, String?) -> ()) { let headers: HTTPHeaders = [ .contentType("application/json") ] AF.request(doctor_login, method: .post, parameters: login, encoder: JSONParameterEncoder.default, headers: headers) .responseData { response in debugPrint(response) switch response.result { case .success(let data): // 检查状态码是否为200 guard let statusCode = response.response?.statusCode, statusCode == 200 else { completionHandler(false, nil, "Please try again") print("Status code not 200") return } // 将响应data转为字符串(和Android的response.body().string()逻辑一致) guard let userId = String(data: data, encoding: .utf8) else { completionHandler(false, nil, "Failed to parse user ID") print("Failed to convert data to string") return } // 这里可以直接保存userId到变量、UserDefaults或者其他存储方式 print("Extracted User ID: \(userId)") // 示例:持久化保存到UserDefaults UserDefaults.standard.set(userId, forKey: "currentLoggedInUserId") // 通过completionHandler返回结果给调用方 completionHandler(true, userId, "Login Done") case .failure(let err): print(err.localizedDescription) completionHandler(false, nil, "Try Again") } } }
关键说明:
- 移除冗余的URLSession请求:Alamofire已经帮你完成了网络请求,直接用它返回的
data即可,不需要再重复发起请求。 - 直接转换为字符串:你的Lambda返回的是纯文本格式的用户ID(比如"2"),所以不需要JSON解析,直接把
data转成String就可以,这和Android端response.body().string()的逻辑完全对应。 - 处理边界情况:增加了对
data为空、状态码非200的判断,避免崩溃或异常。 - 保存用户ID:拿到
userId后,你可以根据需求选择存储方式:- 临时存储:保存到全局变量或者ViewModel的属性中
- 持久化存储:用
UserDefaults、Keychain或者Core Data
调用示例
当你调用这个方法时,就能拿到用户ID并处理后续逻辑:
callingLoginAPI(login: yourLoginModelInstance) { success, userId, message in if success, let userId = userId { // 登录成功,使用userId做后续操作 print("Logged in successfully with ID: \(userId)") } else { // 登录失败,提示用户 print("Login failed: \(message ?? "Unknown error")") } }
内容的提问来源于stack exchange,提问作者Muhammad Arsalan Hassan
相关产品推荐
相关产品推荐

