如何在完成另一个功能后执行另一个功能

Posted

技术标签:

【中文标题】如何在完成另一个功能后执行另一个功能【英文标题】: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()。 【参考方案1】:

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

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

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


...

data.login 
   data.getData()

【讨论】:

以上是关于如何在完成另一个功能后执行另一个功能的主要内容,如果未能解决你的问题,请参考以下文章

如何在一个请求中等待,直到另一个请求完成 nodeJS 中相同功能的执行

完成处理程序在运行另一个任务之前完成任务

在目标c中使用完成块完成方法后如何执行另一种方法?

如何从创建的 UIViewController 中的另一个 UIViewController 执行功能

如何结合这两个功能,让一个等到它完成,然后运行另一个

当另一个类完成处理所需数据时如何中断 Viewcontroller