swift - 有没有办法在 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
}
谢谢,祝你有美好的一天,保持健康。
布托什
解决方案
您正在寻找一个闭包,也就是完成处理程序。
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
}
}