使用IF LET就像关闭一样

时间:2016-04-19 19:06:04

标签: swift if-statement closures

假设函数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?我试图理解何时需要使用闭包来进行异步任务,并且我不确定在这种情况下我是否需要它。

2 个答案:

答案 0 :(得分:1)

是的,在theIntIWant返回之后,calculate()才会被分配

答案 1 :(得分:1)

这与闭包没有任何关系,你也没有说过calculate是异步的。它与if let无关!您的问题实际上与线程有关。

规则很简单。您必须不会在任何时间内阻止主线程。如果calculate()能够在30秒工作后返回值,则必须仅在后台线程上调用。如果,在调用它之后,你想要对涉及属性,接口或其他非线程安全事物的结果做一些事情,那么你需要回到主线程。