【问题标题】:How to use functions in order?如何按顺序使用函数?
【发布时间】:2022-08-04 15:35:52
【问题描述】:

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

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。 我应该怎么做?

  • 您需要了解异步调用。一种解决方案是从您现在在 first() 中拥有 print 语句的地方调用 second()。但我认为这并不是你真正想要做的,即使你的问题暗示了这一点。

标签: swift


【解决方案1】:

这是因为您正在使用异步代码,将 second 函数的调用移动到第一个函数的 .success() 块,如下所示:

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

这样您就可以确定 second func 仅在 first func 完成后调用

【讨论】:

    【解决方案2】:
    func first(completion: @escaping(_ success:Bool) -> Void) {
        // using alamofire
        case .success():
             completion(true)
         case .failure():
             completion(false)
        }
    func second(completion: @escaping(_ success:Bool) -> Void) {
       
        case .success():
             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")
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      • 2020-08-22
      • 2012-10-20
      相关资源
      最近更新 更多