2016-04-26 14 views
27

私はちょうどカップルの日Swiftに切り替えるだけです。私は接尾辞と接頭辞++と - がSwift 3で削除されることに気付きました。私はいくつかの研究を行い、Swiftのウェブサイト上のアナウンスに従って++と - + = 1と - = 1に置き換えられます。ここにリンクしてくださいNew Features in Swift 2.2++と+ = 1はまったく同じですか?

私はSwiftの古いバージョンでうまく動作するコードを持っています。私はreturn counter1++から変更した場合return counter1 += 1に私の元のコードで、エラーが

NO「+ =」候補が予想文脈型がここにint型

は私の例で生成していないと言ってポップアップ表示され

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

私はこれを解決しようとしましたが、依然としてスタックしました。

+1

私は推測していますが、私の推測は次のとおりです。この言語では、 '+ ='式は値を返さないので 'return couter1 + = 1; 'counter + = 1'を実行してから' return counter1'を実行する必要があります。 – Walfrat

+2

@Walfratこれは '++'が消える可能性があることをほぼ正当化します...この場合、 'return counter1 ++'は本当に 'counter2 = counter1;カウンタ1 + = 1; return counter2'となる。 Postfixは頻繁に起こるのを待っているエラーです... – donkopotamus

+1

後置接尾辞/接頭辞を返す++は良い考えではありません。実際に何をしているのかを本当に知っている開発者と一緒に真のパフォーマンス目的のために予約する必要があります。 – Walfrat

答えて

8

私のコメントでは、ここでpostfix ++を置き換える方法を書いています。もう1つの方法は、-1のことが気に入らなければ中間変数を使うことです。

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

なぜcounter1-1を返すのですか?関数は何もしないで値をインクリメントすることになっています – LordAro

+2

この関数はcurrentValueを返し、次の実行のために1だけインクリメントします。これは++ postfixの使い方を典型的に示していますが、削除されているので、カウンタをインクリメントして先行値を返す必要があります。 – Walfrat

+0

@LordAro:これは一部の人にとっては非常に混乱することがあります。私は先に進んで、 'value ++'と '++ value'の使い方を調べてみることをお勧めします。 'counter1'を返すだけであれば、' return ++ counter1'と同等です。これは私が望むものではありません。 –

8

いいえ、単純ではありませんが、++と - インクリメント(またはデクリメント)とリターン、+ =と - =加算(または減算)何かを返す。

したがって、値の変更と値の使用を分ける必要があります。これは本当に非推奨の全ポイントです - あなたのコードを読みやすく保守しやすくするためです。あなたの便宜のためにここにコピーApple docsでそれが明確に述べて

18

、:

NOTE複合代入演算子は値を返しません

。たとえば、let b = a += 2と書くことはできません。

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

1

これらは同一ではありません。最初に増分してから値を返す必要があります。これを試してください。

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

ええ、私は接頭辞/後置物のためにあなたが 'counter1 - 1'を返すべきだと思います。いくつかのテストを実行すると、結果が異なることがわかります –

関連する問題