为什么在Swift中发生这种情况?

时间:2017-07-27 06:57:45

标签: swift operators

let _ = Timer.scheduledTimer(withTimeInterval: 2.0, repeats: true) { (timer) in
    print("conunter \(counter += 1)")
}

输出:

conunter ()
conunter ()
conunter ()
.........

但如果我这样做

 let _ = Timer.scheduledTimer(withTimeInterval: 2.0, repeats: true) { (timer) in
    counter += 1
    print("conunter \(counter)")
}

产生预期结果。为什么会这样?

2 个答案:

答案 0 :(得分:4)

由于+=运算符的特定功能具有inout Int类型和Int类型,并返回(),因此a.k.a. Void

这是一项故意的设计决定,旨在阻止在其他表达中使用变异副作用。你的案子正是他们希望阻止的。

为此增加一行可能会很烦人,但请考虑一下:是否真的需要print语句来增加变量?这并不像"打印"对我来说。

答案 1 :(得分:0)

所以基本上+=这是一个运算符重载方法,就像c++一样,所以它是一个返回上面答案提到的Void ()类型的函数,所以它是打印conunter ()

执行函数语句后,它会更容易理解counter的值,第二次使用counter将具有该值。