首页 > 解决方案 > 有没有办法在 Swift 中延迟返回语句?

问题描述

我想知道是否有任何方法可以延迟函数的返回语句......一个例子:

func returnlate() -> String {
    var thisStringshouldbereturned = "Wrong"
    DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
        // Here should be the String changed
        thisStringshouldbereturned = "right"
    }
    // The Return-Statement returns the First Value ("Wrong")
    // Is there a way to delay the return Statement?
    // Because you can't use 'DispatchQueue.main.asyncAfter(deadline: .now() + 1)'
    return thisStringshouldbereturned
}

谢谢,祝你有美好的一天,保持健康。

布托什

标签: swift

解决方案


您正在寻找一个闭包,也就是完成处理程序。

return立即执行,没有办法延迟。相反,您可以使用完成处理程序,它通过将闭包作为参数传递来工作。然后可以在延迟后调用此闭包。

                            /// closure here!
func returnLate(completion: @escaping ((String) -> Void)) {
    var string = "Wrong"
    DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
        string = "right"
        completion(string) /// similar to `return string`
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    returnLate { string in
        print("String is \(string)") /// String is right
    }
}

推荐阅读