当我在tableView中选择一个项目时,我希望第一个函数 fetchChosenExerciseData 在第二个函数 goToSegue 触发之前执行。我该如何实施?我看过完成块,但无济于事。
下面是我的代码段:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRow(at: indexPath) as! UITableViewCell
exerciseChosen = cell.textLabel!.text!
duplicatesRemovedFromSetDataList.removeAll()
fetchChosenExerciseData()
goToSegue()
谢谢。
答案 0 :(得分:1)
由于fetchChosenExerciseData
是异步的,因此您需要此结构
func fetchChosenExerciseData(completion:@escaping()->()) {
Api.load {
completion()
}
}
致电
fetchChosenExerciseData {
goToSegue()
}
答案 1 :(得分:0)
使用完成处理程序可以轻松实现:
func fetchChosenExerciseData(_ completion: @escaping () -> Void) {
// do what you need
completion()
}
在您的didSelectRowAt
中,您可以插入第二个函数
fetchChosenExerciseData {
// goToSegue
}
答案 2 :(得分:0)
您的函数fetchChosenExerciseData
似乎具有某些异步部分或正在不同Queue上执行的代码。
对于这种情况,应使用完成块。 因此,您必须像这样声明“ fetchChosenExerciseData”
func fetchChosenExerciseData (completion (()->()))
{
// Enter your code
completion()
}
我已经读过您已经完成了此解决方案,但是我相信那一定有一些错误
答案 3 :(得分:0)
首先将完成框添加到方法fetchChosenExerciseData
中,例如
func fetchChosenExerciseData(finished: () -> Void) {
print("Doing something whatever you want!")
finished()
}
,然后从第一个方法的完成块中调用函数goToSegue
,例如
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRow(at: indexPath) as! UITableViewCell
exerciseChosen = cell.textLabel!.text!
duplicatesRemovedFromSetDataList.removeAll()
fetchChosenExerciseData{
goToSegue()
}
}
希望获得帮助!