Swift: 无法从 API 闭包中获取数据
Swift: Can't fetch data from API Closure
我是 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 打印(始终为空)。
有人可以帮助我吗?它困扰了我很长时间。我会很感激的。
如@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
}
}
我是 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 打印(始终为空)。 有人可以帮助我吗?它困扰了我很长时间。我会很感激的。
如@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
}
}