为什么完成处理程序没有 return 任何东西?
Why does the completion handler does not return anything?
所以,我有一个 json get 请求,它获取 class Horse 的所有 horse 对象。这成功了。我有一个完成处理程序,它应该让我在调用 getHorses 请求的另一个视图中再次使用 horses 对象,但是当我尝试将这些对象放入另一个数组时,它不会附加它们。为什么会这样?
这是我的代码:
func getJSONHorses (completion: @escaping ([Horse])->[Horse]) { //Message<[Horse]>
let url = "http://localhost:8083/horses"
if let url = URL(string: url)
{
let task = session.dataTask(with: url) { data, response, error in
if error != nil || data == nil {
print("Client error!")
return
}
let str = String(decoding: data!, as: UTF8.self)
print(str)
do {
print("nothing")
let json = try JSONDecoder().decode(Message<[Horse]>.self, from: data!)
print(json.model?.count as Any)
// print(json.model as Horse)
// print(json.self.model)
// print(json.model)
print(json.model as Any)
print("something")
completion(json.model!)
} catch {
print("JSON error: \(error)")
print("erroooorrrrrr")
}
}
task.resume()
print("finished")
}
}
这里我使用函数:
print("Startttt")
backEnd.getJSONHorses(completion:{(horse) in
for h in horse {
self.horses.append(h)
}
print(horse.count)
self.horses = horse
//print(horse.count as Any
return horse
})
print(horses.count)
print("END")
即使我尝试将马追加到马数组中,马数组也为 0。
我已经用 (JSON 和实现)测试了你的代码,首先,我建议使用这个:
func getJSONHorses(completion: @escaping([Horse]) -> Void)
你应该为 UITableViewDelegate, UITableViewDataSource
准备逻辑(tableView 取决于你的数组,你设置 numberOfRowsInSection
就像 self.horses.count
等等)并设置你的数据table查看一些变量(就像你所做的那样 - self.horses
它是全局的 var horses = [Horse]()
)并调用它:
backEnd.getJSONHorses(completion:{ horse in
print(horse.count)
self.horses = horse
self.tableView.reload()
})
就是这样。我已经检查过了,这就足够了。小心 - 你应该在收到数据
后重新加载 table
所以,我有一个 json get 请求,它获取 class Horse 的所有 horse 对象。这成功了。我有一个完成处理程序,它应该让我在调用 getHorses 请求的另一个视图中再次使用 horses 对象,但是当我尝试将这些对象放入另一个数组时,它不会附加它们。为什么会这样?
这是我的代码:
func getJSONHorses (completion: @escaping ([Horse])->[Horse]) { //Message<[Horse]>
let url = "http://localhost:8083/horses"
if let url = URL(string: url)
{
let task = session.dataTask(with: url) { data, response, error in
if error != nil || data == nil {
print("Client error!")
return
}
let str = String(decoding: data!, as: UTF8.self)
print(str)
do {
print("nothing")
let json = try JSONDecoder().decode(Message<[Horse]>.self, from: data!)
print(json.model?.count as Any)
// print(json.model as Horse)
// print(json.self.model)
// print(json.model)
print(json.model as Any)
print("something")
completion(json.model!)
} catch {
print("JSON error: \(error)")
print("erroooorrrrrr")
}
}
task.resume()
print("finished")
}
}
这里我使用函数:
print("Startttt")
backEnd.getJSONHorses(completion:{(horse) in
for h in horse {
self.horses.append(h)
}
print(horse.count)
self.horses = horse
//print(horse.count as Any
return horse
})
print(horses.count)
print("END")
即使我尝试将马追加到马数组中,马数组也为 0。
我已经用
func getJSONHorses(completion: @escaping([Horse]) -> Void)
你应该为 UITableViewDelegate, UITableViewDataSource
准备逻辑(tableView 取决于你的数组,你设置 numberOfRowsInSection
就像 self.horses.count
等等)并设置你的数据table查看一些变量(就像你所做的那样 - self.horses
它是全局的 var horses = [Horse]()
)并调用它:
backEnd.getJSONHorses(completion:{ horse in
print(horse.count)
self.horses = horse
self.tableView.reload()
})
就是这样。我已经检查过了,这就足够了。小心 - 你应该在收到数据
后重新加载 table