swift 无法从API Closure获取数据

k5hmc34c  于 2023-08-02  发布在  Swift
关注(0)|答案(1)|浏览(115)

我是Swift的初学者。我试图使应用程序从Django服务器获取数据,但我被困在从Closure获取数据,我的代码如下:

var datasource: [Vender] = []

override func vieDidLoad() {
   super.viewDidLoad() 
   loaddata()
   print(datasource) //#1 print
}
 
func loadata(){ 
    VenderAPI(method: "GET", endpoint: "vender", APIportocol: Vender(), index: "") {
    Result in 
      switch Result {
        case .failure(let error):
          print(error.localizedDescription)
        case .success(let APIdata):
          for data in APIdata {
            self.datasource.append(data)
         }
     }
  print(self.datasource) //#2 print
}

字符串
我的问题是,我可以得到#2打印(从服务器正确的数据和格式),但不是#1打印(总是空的)。有人能帮帮我吗我会很感激的。

lvjbypge

lvjbypge1#

正如@Larme提到的,你需要处理异步函数。阅读关于它。试试这个方法:

override func viewDidLoad() {
    super.viewDidLoad()
    loaddata() { done in  // <--- here
        print(datasource) // print when all work is done
    }
}
 
func loadata(completion: @escaping(Bool) -> ()) {  // <--- here
    VenderAPI(method: "GET", endpoint: "vender", APIportocol: Vender(), index: "") {
        result in
        switch result {
        case .failure(let error):
            print(error.localizedDescription)
        case .success(let APIdata):
            for data in APIdata {
                self.datasource.append(data)
            }
        }
        completion(true)  // <--- here
    }
}

字符串

相关问题