2016-08-10 5 views
-2

Swift 3では '++'と ' - 'が削除されるため、以下のコードは無効になります。swift3の '++'と ' - 'の置き換えは何ですか?

return i < 0 ? nil : i-- 

今私はちょうどこの

if i < 0 { 
    return nil 
} 
let res = i 
i -= 1 
return res 

のようにそれを書き換えるしかし、それはあまりにも....面倒になります。

Swift 3ではこのコードをできるだけ短く書き換える方法はありますか?

+3

ここで可変性のための理由はありませんが。 iを変えずに戻って、i - 1を返してください。あなたの古いコードはそのまま役に立つでしょう。 – SBI

+0

@SBI OPを見てみると、何らかの暗黙的な方法で 'i'の減少が使用される可能性があります(例えば、' i'はinout変数です)。これはおそらく、[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)です。 DarkLuna:本当に 'i'を減らして以前の値を返す必要がある場合、これらの操作を使うコンテキストはどのように見えますか? '++'や '--'演算子を使う必要がないような方法で構築することができます。 – dfri

+0

私はこの質問は、それが旗印された犬だとは思わない。さらに、以下の答えが仮定されていることは疑問ではない(すなわち、i-の副作用が誤っていると仮定した回答、誤っていても意図的であるように見える)。 – Rob

答えて

1

この問題は、キャリーオーバーC.からこれらがなくて を追加した、非常に早い スウィフトの開発で追加された

スウィフトでインクリメント/デクリメント演算子this proposalにクリス・ラットナーによってアプローチでした多くの配慮があり、それ以来 以来ずっと考えられていない。このドキュメントでは新鮮な外観を提供しています。最終的に は混乱しており、 は体重を持たないため完全に削除することを推奨しています。

ボトムラインでは、これらのインライン変異演算子を使用しないでください。

私は、スコープを終了する直前にiの値を変更する理由がわかりません。

私はをインラインまたはを使用しないことを行うことを検討行方不明です理由がある場合はあなたがすることができ、まだ三項演算

+0

@vacawama - 正解、私は私の答えを更新しました。 –

0

異なります

return i < 0 ? nil : i - 1 
+0

ですが、iの値は変更されていません。 – DarkerLuna

+0

はい、戻り値とともに関数のスコープから存在しているので、 'i'の変更は必要ありません。戻り値は 'i'の新しい値を返します。 –

関連する問題