2017-07-27 9 views
0
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

多少の関連性:[スウィフト割り当て評価が無効になった理由は何ですか?](https://stackoverflow.com/questions/34173084/what-was-the-reason-for-swift-assignment-evaluation-to-無効)。あなたの説明に感謝します。 –

答えて

4

+=オペレータの特定の機能がinout IntIntを入力しており、()を返すので、別名Void

これは他の式の中に副作用を変異の使用を阻止するために実装意図的な設計上の決定です。あなたのケースは、まさに彼らが予防することを望んでいたものです。

これに1行追加するのは面倒かもしれませんが、これを考慮してください:実際には変数をインクリメントするのにprint文の仕事ですか?それは私の "印刷"のようには聞こえません。

+0

あなたは私にこれについてもっと学ぶことができるように私にいくつかの参照を与えることができますか? – iMuzahid

+0

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

+0

Thanks @Alexander – iMuzahid

0

したがって、基本的+=これは、そう、それは上記の回答で述べたタイプVoid()を返す関数であるので、それは印刷conunter()あるだけc++のようなメソッドをオーバーロード演算子です。

functionステートメントを実行すると、counterの値がわかりやすくなり、2番目の使用counterに値が設定されます。

関連する問題