'++'および '-'演算子は非推奨になりましたXcode7.3



Operators Have Been Deprecated Xcode 7



解決:

Swiftの作成者であるChrisLattnerからの完全な説明がここにあります。ポイントをまとめます。

  1. それはあなたがSwiftを学びながら学ばなければならないもう一つの機能です
  2. それほど短くないx + = 1
  3. SwiftはCではありません。Cプログラマーを喜ばせるためだけにそれらを持ち越すべきではありません。
  4. その主な用途は、Cスタイルのforループです。i = 0の場合;私0のiの場合。
  5. 読み、維持するのが難しい場合があります。たとえば、x-++ xまたはfoo(++ x、x ++)?
  6. クリス・ラトナーはそれが好きではありません。

興味のある人(そしてリンク切れを避けるため)にとって、ラトナーの彼自身の言葉での理由は次のとおりです。



  1. これらの演算子は、最初のプログラミング言語としてSwiftを学習する負担を増やします。または、別の言語からこれらの演算子をまだ知らないその他の場合も同様です。

  2. それらの表現上の利点は最小限です-x ++はx + = 1よりもはるかに短くはありません。



  3. Swiftは、=、+ =およびその他の割り当てのような操作が(いくつかの理由で)Voidを返すという点で、すでにCから逸脱しています。これらの演算子は、そのモデルと矛盾しています。

  4. Swiftには強力な機能があり、他の言語のCスタイルのforループで++ iを使用する一般的な理由の多くを排除するため、これらは適切に記述されたSwiftコードでは比較的まれにしか使用されません。これらの機能には、for-inループ、範囲、列挙、マップなどが含まれます。

  5. これらの演算子の結果値を実際に使用するコードは、多くの場合、コードのリーダー/メンテナーにとって混乱し、微妙です。彼らは、かわいいかもしれないが理解するのが難しい「過度にトリッキーな」コードを奨励しています。



  6. Swiftには明確に定義された評価の順序がありますが、それに依存するコード(foo(++ a、a ++)など)は、明確に定義されていても望ましくありません。

  7. これらの演算子は、整数スカラーと浮動小数点スカラー、およびイテレーターのような概念など、比較的少数のタイプに適用できます。複素数、行列などには適用されません。

最後に、これらは「まだ持っていなかった場合、Swift 3に追加しますか?」というメトリックに失敗します。


このコメントは質問に答えていないことを理解していますが、これらのオペレーターを機能させ続ける方法を探している人がいるかもしれません。そのような解決策は下部にあります。

私は個人的に好きです++および-演算子。それらは扱いにくい、または管理が難しいという意見には同意できません。開発者がこれらの演算子の機能を理解すると(そして私たちは非常に単純なことについて話しているので)、コードは非常に明確になるはずです。

演算子が非推奨になった理由の説明では、それらの主な用途はCスタイルのforループであったと述べられています。他の人のことは知りませんが、個人的にはCスタイルのループをまったく使用していません。他にも多くの場所や状況があります。++または-演算子は便利です。

私も言及したいと思いますvarName ++は値を返すため、一方、戻るvarName + = 1はできません。

これらのオペレーターをここで機能させ続けたいと思っている人にとっては、次のような解決策があります。

プレフィックス演算子++ {}プレフィックス演算子++ {}プレフィックス演算子-{}プレフィックス演算子-{} //プレフィックス関数をインクリメント++(inout x:Int)-> Int {x + = 1 return x} postfix func ++(inout x:Int)-> Int {x + = 1 return(x --1)}プレフィックスfunc ++(inout x:UInt)-> UInt {x + = 1 return x} postfix func ++(inout x:UInt)-> UInt {x + = 1 return(x --1)}プレフィックスfunc ++(inout x:Int8)-> Int8 {x + = 1 return x} postfix func ++(inout x:Int8) -> Int8 {x + = 1 return(x --1)}プレフィックスfunc ++(inout x:UInt8)-> UInt8 {x + = 1 return x} postfix func ++(inout x:UInt8)-> UInt8 { x + = 1 return(x --1)}プレフィックスfunc ++(inout x:Int16)-> Int16 {x + = 1 return x} postfix func ++(inout x:Int16)-> Int16 {x + = 1 return(x --1)}プレフィックスfunc ++(inout x:UInt16)-> UInt16 {x + = 1 return x} postfix func ++(inout x:UInt16)-> UInt16 {x + = 1 return(x- 1)}プレフィックスfunc ++(inout x:Int32)-> Int32 {x + = 1 return x} postfix func ++(inout x:Int32)-> Int32 {x + = 1 return(x-1)}プレフィックスfunc ++(inout x:UInt32)-> UInt32 {x + = 1 return x} postfix func ++(inout x:UInt32)-> UInt32 {x + = 1 return(x --1)} prefix func ++(inout x:Int64) -> Int64 {x + = 1 return x} postfix func ++(inout x:Int64)-> Int64 {x + = 1 return(x --1)} prefix func ++(inout x:UInt64)-> UInt64 { x + = 1 return x} postfix func ++(inout x:UInt64)-> UInt64 {x + = 1 return(x-1)} prefix func ++(inout x:Double)-> Double {x + = 1 return x} postfix func ++(inout x:Double)-> Double {x + = 1 return(x --1)} prefix func ++(inout x:Float)-> Float {x + = 1 return x} postfix func ++(inout x:Float)-> Float {x + = 1 return(x-1)}プレフィックスfunc ++(inout x:Float80)-> Float80 {x + = 1 return x} postfix func ++( inout x:Float80)-> Float80 {x + = 1 return(x --1)}プレフィックスfunc ++(inout i:T)-> T {i = i.successor()return i} postfix func ++(inout i:T)-> T {let y = ii = i.successor()return y} //プレフィックスfuncをデクリメント-(inout x:Int)-> Int {x- = 1 return x} postfix func-( inout x:Int)-> Int {x- = 1 return(x + 1)} prefix func-(inout x:UInt)-> UInt {x- = 1 return x} postfix func-(inout x:UInt)-> UInt {x- = 1 return(x + 1)}プレフィックスfunc-(inout x:Int8)-> Int8 {x- = 1 return x} postfix func-(inout x:Int8)-> Int8 {x- = 1 return( x + 1)}プレフィックスfunc-(inout x:UInt8)-> UInt8 {x- = 1 return x} postfix func-(inout x:UInt8)-> UInt8 {x- = 1 return(x + 1) }プレフィックスfunc-(inout x:Int16)-> Int16 {x- = 1 return x} postfix func-(inout x:Int16)-> Int16 {x- = 1 return(x + 1)}プレフィックスfunc- -(inout x:UInt16)-> UInt16 {x- = 1 return x} postfix func-(inout x:UInt16)-> UInt16 {x- = 1 return(x + 1)} prefix func-(inout x :Int32)-> Int32 {x- = 1 return x} postfix func-(inout x:Int32)-> Int32 {x- = 1 return(x + 1)} prefix func-(inout x:UInt32)- > UInt32 {x- = 1 return x} postfix func-(inout x:UInt32)-> UInt32 {x- = 1 return(x + 1)} prefix func-(inout x:Int64)-> Int64 {x -= 1 return x} postfix func-(inou tx:Int64)-> Int64 {x- = 1 return(x + 1)}プレフィックスfunc-(inout x:UInt64)-> UInt64 {x- = 1 return x} postfix func-(inout x:UInt64) -> UInt64 {x- = 1 return(x + 1)} prefix func-(inout x:Double)-> Double {x- = 1 return x} postfix func-(inout x:Double)-> Double { x- = 1 return(x + 1)}プレフィックスfunc-(inout x:Float)-> Float {x- = 1 return x} postfix func-(inout x:Float)-> Float {x- = 1 return(x + 1)}プレフィックスfunc-(inout x:Float80)-> Float80 {x- = 1 return x} postfix func-(inout x:Float80)-> Float80 {x- = 1 return(x + 1)}プレフィックスfunc-(inout i:T)-> T {i = i.predecessor()return i} postfix func-(inout i:T)-> T {let y = ii = i.predecessor( )yを返す} 

Appleはを削除しました++そして別の古い伝統的な方法でそれをはるかに簡単にしました。

それ以外の++、あなたは書く必要があります+ =。

例:

var x = 1 //インクリメントx + = 1 //平均x = x + 1

デクリメント演算子についても同様です-、あなたは書く必要があります-=

例:

var x = 1 //デクリメントx- = 1 //平均x = x-1

にとってforループ:

インクリメントの例:

それ以外の

var index = 0の場合;索引<3; index ++ { print('index is (index)') }  

あなたは書ける:

// 0のインデックスの例1。<3 { print('index is (index)') } //Example 2 for index in 0..  デクリメントの例:  

var index = 3の場合;インデックス> = 0; --index {print(index)}

あなたは書ける:

for index in 3.stride(to:1、by:-1){print(index)} // 3、2 for index in 3.stride(through:1、by:-1){print(index)} //インデックスの3、2、1を(0。。<3).reverse() { print(index) } for index in (0 ... 3).reverse() { print(index) }  

お役に立てれば!