【问题标题】:How to execute one function after completion of another如何在完成另一个功能后执行另一个功能
【发布时间】:2020-11-25 21:06:16
【问题描述】:

我一直在尝试在login() 完成后执行getData(),但是在使用DispatchQueue.main.async 时似乎永远不会工作

我只能通过强制延迟来使其工作,最好的方法是什么?
谢谢

class DataTask {
    func login{...}
    func getData{...}
} 
struct ContentView: View {
    @State private var data = DataTask()
    var body: some View{
        Text("Hello world")
        .onAppear{
            data.login()
            DispatchQueue.main.asyncAfter(deadline: .now() + 3.0){
                func refreshData(){
                    data.getData()
                    // update the response into core data
                }
            }
        }
    }
}

【问题讨论】:

  • 最简单的方法是在 login() 函数的末尾调用 getData()。

标签: swiftui


【解决方案1】:

永远不要使用硬编码的延迟来解决异步任务,这是一种可怕的做法。

执行一个函数在另一个函数完成后添加一个完成处理程序

class DataTask {
    func login(completion: @escaping: () -> Void) {... completion() ...}
    func getData {...}
}

...

data.login {
   data.getData()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2016-08-27
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多