You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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")
            }
        }
}

关键说明:

  1. 移除冗余的URLSession请求:Alamofire已经帮你完成了网络请求,直接用它返回的data即可,不需要再重复发起请求。
  2. 直接转换为字符串:你的Lambda返回的是纯文本格式的用户ID(比如"2"),所以不需要JSON解析,直接把data转成String就可以,这和Android端response.body().string()的逻辑完全对应。
  3. 处理边界情况:增加了对data为空、状态码非200的判断,避免崩溃或异常。
  4. 保存用户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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 03:57:40