使用 Alamofire 返回已解析的 JSON 数据?

Returning parsed JSON data using Alamofire?

你好,Swift 和 Alamofire 的新手,

我遇到的问题是,当我调用此 fetchAllUsers() 时,代码将 return 空用户数组,在执行完成后,它将进入 AF.request 闭包并执行休息。

我做了一些研究,我想知道这是不是因为 Alamofire 是一个异步函数。

有什么建议吗?

func fetchAllUsers() -> [User] {
    var users = [User]()
    
    let allUsersUrl = baseUrl + "users/"
    
    if let url = URL(string: allUsersUrl) {
        AF.request(url).response { response in
            if let data = response.data {
                users = self.parse(json: data)
            }
        }
    }
    return users        
}

您需要以某种方式处理异步。这意味着为您需要的类型传递完成处理程序。其他时候,这意味着您将其包装在其他异步结构中,例如 promises 或发布者(Alamofire 也提供)。

在你的情况下,我建议你 User 键入 Decodable 并允许 Alamofire 为你解码。

func fetchAllUsers(completionHandler: @escaping ([User]) -> Void) {
    let allUsersUrl = baseUrl + "users/"
    
    if let url = URL(string: allUsersUrl) {
        AF.request(url).responseDecodable(of: [User].self) { response in
            if let users = response.value {
                completionHandler(users)
            }
        }
    }
}

但是,我建议从响应中返回完整的 Result 而不仅仅是 [User] 值,否则您会错过任何发生的错误。