2017-07-27 91 views
0
let _ = Timer.scheduledTimer(withTimeInterval: 2.0, repeats: true) { (timer) in 
    print("conunter \(counter += 1)") 
} 

輸出:爲什麼在Swift中發生這種情況?

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

但如果我這樣做

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

它產生預期的結果。爲什麼發生這種情況?

+2

有點相關:[什麼是Swift賦值評估無效的原因?](https://stackoverflow.com/questions/34173084/what-was-the-reason-for-swift-assignment-evaluation-to-無效)。 –

回答

4

由於+=運營商的特定功能的類型爲inout IntInt,並返回(),又名Void

這是實現阻礙使用突變其他表達式內的副作用的有意設計決定。你的情況幾乎和他們希望阻止的一樣。

這可能很煩人有一個額外的線路,但考慮一下:是否真的是一個print聲明的工作來增加一個變量?這聽起來不像是「打印」給我的。

+0

感謝您的解釋。你能否給我一些參考資料,以便我可以更多地瞭解這一點。 – iMuzahid

+0

@ Md.MuzahidulIslam https://developer.apple.com/documentation/swift/numeric – Alexander

+0

Thanks @Alexander – iMuzahid

0

所以基本上+=這就像c++的運算符重載方法,因此是返回由上述答覆中提到型Void()的功能,所以它是打印conunter()

執行函數聲明後,它將counter的值賦予了這個更容易理解的結果,第二次使用counter將具有該值。

相關問題