函数 returns 在处理另一个函数的 completionHandler 之前的结果,如何解决?

The function returns the result before processing the completionHandler of another function, how to fix it?

我运行遇到了这样的问题,不知道有什么方法可以解决这个问题

首先,假设我有以下功能

func summ(x: Int, y: Int, completionHandler: @escaping (Int) -> ()) {
    let result: Int = x + y
    completionHandler(result)
}

接下来,在另一个函数中,我们想以某种方式处理上述函数的结果和return处理后的值。

func summ(x: Int, y: Int, completionHandler: @escaping (Int) -> ()) {
    let result: Int = x + y
    completionHandler(result)
}


func getResult(x: Int, y: Int) -> (String) {
    let resultString: String = ""

    summ(x, y) { result in
        resultString = "Result: \(String(result))" 
    }

    return resultString
}

但是当我调用 let resultString = getResult(x = 15, y = 10) 时,我只得到一个空字符串。当试图找到一个错误时,我意识到在这个方法中它创建了 let resultString: String = "" 然后立即 return 这个变量 return resultString,只有在那之后 completionHandler 开始工作

MARK - 下面的解决方案不适合我,因为我上面指出的方法只是一个例子,在实际项目中,我需要 return 函数中的正确值才能使用更进一步。

let resultString: String = ""

func summ(x: Int, y: Int, completionHandler: @escaping (Int) -> ()) {
    let result: Int = x + y
    completionHandler(result)
}


func getResult(x: Int, y: Int) {
    summ(x, y) { result in
        resultString = "Result: \(String(result))"
        self.resultString = resultString
    }
}

所以它是 returning "",因为求和函数需要时间才能完成。在 getResult 函数中,因为 sum 函数需要时间才能完成,所以在 getResult 函数中你总是 return "" 。所以 getResult 应该看起来像这样。

func getResult(x: Int, y: Int, completion: (String) -> Void) {
  let resultString: String = ""

  summ(x, y) { result in
    resultString = "Result: \(String(result))" 
    completion(resultString)
  }

}