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)")
}
产生预期结果。为什么会这样?
答案 0 :(得分:4)
由于+=
运算符的特定功能具有inout Int
类型和Int
类型,并返回()
,因此a.k.a. Void
这是一项故意的设计决定,旨在阻止在其他表达中使用变异副作用。你的案子正是他们希望阻止的。
为此增加一行可能会很烦人,但请考虑一下:是否真的需要print
语句来增加变量?这并不像"打印"对我来说。
答案 1 :(得分:0)
所以基本上+=
这是一个运算符重载方法,就像c++
一样,所以它是一个返回上面答案提到的Void ()
类型的函数,所以它是打印conunter ()
。
执行函数语句后,它会更容易理解counter
的值,第二次使用counter
将具有该值。