web-dev-qa-db-ja.com

++と+ = 1はまったく同じですか?

数日間Swiftに切り替えると、Swift3で接尾辞と接頭辞++および-が削除されることに気付きました。3。調査を行い、発表によるとSwift Webサイトでは、演算子++と-は+ = 1と-= 1に置き換えられます。ここにリンク Swift 2.2の新機能

古いバージョンのSwiftで問題なく動作するコードがあります。元のコードであるreturn counter1++からreturn counter1 += 1に変更すると、エラーがポップアップ表示されます。

'+ ='候補は期待されるコンテキスト型 'Int'を生成しません

これが私の例です

func countingCounter() -> (() -> Int){
    var counter1 = 0
    let incrementCounter1: () -> Int = {
        return counter1+=1   //original is counter1++
    }
return incrementCounter1
}

私はこれを解決しようとしましたが、それでも立ち往生しています。

27
hientrq

私のコメントで述べたように、ここに接尾辞++を置き換えるために今それを書かなければならない方法があります。もう1つの方法は、-1が気に入らない場合は、中間変数を使用することです。

let incrementCounter1: () -> Int = {
    counter1+=1   //original is counter1++
    return counter1-1;
}
8
Walfrat

Apple docs に明確に記載されており、便宜上ここにコピーされています。

注意

複合代入演算子は値を返しません。たとえば、let b = a += 2を書くことはできません。

いいえ、++演算子は+=と同じではありません。

18
Laffen

いいえ、それらは同一ではありません。++と-はインクリメント(またはデクリメント)して戻り、+ =と-=は読みやすい短い形式で量を加算(または減算)しますが、何も返しません。

したがって、値の変更を値の使用法から分離する必要があります。これが非推奨の要点です。コードを読みやすく、保守しやすくするためです。

8
Wain

いいえ、それらは同一ではありません。最初にインクリメントしてから、値を返す必要があります。これを試してください。

func countingCounter() -> (() -> Int){
    var counter1 = 0
    let incrementCounter1: () -> Int = {
        counter1 += 1
        return counter1
    }
    return incrementCounter1
}
1
NuttLoose