假设函数calculate()需要30秒才能返回int
更新/编辑:我忽略了提及假设这是在后台线程上,而不是主线程。
calculate() -> Int{
let anInt = ...//task that takes 30 seconds to complete
return anInt
}
如果我使用if let
有条件地将calculate的值绑定到如下变量:
if let theIntIWant = calculate() as? String {
print("the value I want is: \(theIntIWant)")
}
这个if let
的功能是否类似于闭包,在calculate()
返回其值之前不会评估IntIWant?我试图理解何时需要使用闭包来进行异步任务,并且我不确定在这种情况下我是否需要它。
答案 0 :(得分:1)
是的,在theIntIWant
返回之后,calculate()
才会被分配。
答案 1 :(得分:1)
这与闭包没有任何关系,你也没有说过calculate
是异步的。它与if let
无关!您的问题实际上与线程有关。
规则很简单。您必须不会在任何时间内阻止主线程。如果calculate()
能够在30秒工作后返回值,则必须仅在后台线程上调用。如果,在调用它之后,你想要对涉及属性,接口或其他非线程安全事物的结果做一些事情,那么你需要回到主线程。