如何在 JSON Alamofire 请求中的函数中返回正确的值



现在我已经能够访问我试图从 JSON 中获取的数据。现在我需要创建一个变量来保存数据,因为我们不想将其存储在数据库中。

我尝试使变量totalBalance将值存储为可选值,但它给了我一个错误,因为我尝试在函数中返回它,它返回为 nil 并破坏了应用程序。当我给它赋值 0 时,返回零,因为该函数没有按顺序运行,而是在 alamofire 请求的同时运行 return 语句,导致变量永远不会被分配正确的值。我希望totalBalance从函数中返回总余额。打印语句显示totalBalance值的死亡位置。

var totalBalance: Double = 0
func grabBalance() -> Double {
    var getBalance: Double = 0
    Alamofire.request("http://localhost:8000/accounts/balance/get", method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in
        print("Request: (String(describing: response.request))")   // original url request
        print("Response: (String(describing: response.response))") // http url response
        print("Result: (response.result)")
        if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {
            print("Data: (utf8Text)") // original server data as UTF8 string
        }                      // response serialization result
        if let json = response.result.value {
            print("JSON: (json)") // serialized json response
            let jsonValue = JSON(json)
            if let items = jsonValue["balanceResponse"]["accounts"].array {
                for item in items {
                    if let current = item["balances"]["current"].double{
                        print(current)
                        getBalance = getBalance + current
                    }
                    self.totalBalance = getBalance
                }
            }
        }
        print("This is where it shows the total balance: (self.totalBalance)")
    }
    print("This is where it shows that it is 0: (self.totalBalance)")
    return self.totalBalance
}

当您使用 Alamofire 发出请求时,您使用的是Asynchronous请求,这意味着请求之后的代码将被执行,并且不会等待请求完成。

在特定情况下,您可以在成功回调时返回totalBalance

最新更新