如何按顺序使用功能?

问题描述 投票:0回答:3

我想使用一些功能。 但它是随机起作用的。

func first() {
    // using alamofire 
    case .success():
    ...
        print("1")
}

func second() {
    // using alamofire
    ...
    case .success():
        print("2")
        tableView.reloadData()
}

@IBAcition func click(_ sender: Any) {
    first()
    second()
}

如果我点击按钮。 我希望总是打印:1 2。 但它有时会打印 2 1。 我该怎么办?

swift uitableview async-await alamofire
3个回答
0
投票

这是因为您正在使用异步代码,请将

second
函数的调用移动到第一个函数的
.success()
块,如下所示:

func first() {
    // using alamofire 
    case .success():
    ...
        print("1")
        second()
    }

这样你就可以确保

second
func 仅在
first
func 满足后才被调用


0
投票
func first(completion: @escaping(_ success:Bool) -> Void) {
    // using alamofire
    case .success():
            print("1")
         completion(true)
     case .failure():
         completion(false)
    }
func second(completion: @escaping(_ success:Bool) -> Void) {
   
    case .success():
         print("2")
         completion(true)
    case .failure():
         completion(false)
}

@IBAcition func click(_ sender: Any) {
    first { success in // first func executed
        if success { // first func success is true
            second { success in
                if success { // second func success is true
                    print("do something now")
                } else {
                    print("2nd func failed")
                }
            }
        } else {
            print("1st func failed")
        }
    }
}

0
投票

这更多的是关于异步调用的理解,而不是代码问题。当进行异步调用时,无论是通过网络还是本地的 API 调用,您都无法确定它返回的顺序。

例如,当调用第一个和第二个调用时,第二个调用可能会比第一个调用更早返回。因此造成了您面临的问题。

要解决该问题,您可以尝试 Zeeshan Ahmed

提供的答案
© www.soinside.com 2019 - 2024. All rights reserved.