スイフト2.2。 最も重要な革新

親愛なる読者の皆さん、こんにちは!

実験的なSwiftの本を棚から大胆に出してくれてありがとう。 4月のオーバープリントを真剣に検討し、更新について著者に相談し、他のより基本的な本を探します。 これらの検索中に、私は素晴らしい記事を知りました。これは、「Swiftの未来は何を準備しているのか」ということです。 訳文の下に翻訳があります。

素敵な読書を!


Swift 2.2言語のリリースは、Xcode 7.3のリリースとともに計画されており、2016年3月から5月の間に行われる予定です。このバージョンは、Swift 2とSwift 3の中間として位置付けられ、多くの変更を伴います。 基本的に、Swift 2.2は変更について警告するだけですが、Swift 3では慣れていることの多くを実行できません。 しかし、心配しないでください。これは、Swiftをさらに迅速にするのに役立つもう1つの重要なステップだと思います。

ここでは、Swiftで計画されている最も重要な変更のいくつかに言及します。 Xcode 7.2および7.3-betaで動作するSwift 2.2のデモバージョンをダウンロードすることにより、今すぐ試すことができます。 以前は、 公式Webサイトで説明されている最新バージョンのSwiftについて知る必要があります。

オペレーター

Swift 2.2には++および--演算子はありません。 一見、私は激怒しましたが、実際、現代のSwiftでは、それらはもはや必要ありません。 新しいforループと、 mapfilterなどの高次関数のおかげで、インクリメントは不要になりました。 もちろん、増分を自分で実装することもできますが、方法は異なります。

 func plusPlus() { var i = 0 i++ // : '++' :  Swift 3     i += 1 // '+='  '-='          // succesor()  predecessor()     let alphabet = "abcdefghijklmnopqrstuvwxyz" let index = alphabet.characters.indexOf("u") if let index = index { alphabet.characters[index.successor()] } } 


Chris Luttnerは、これらのインクリメント/デクリメント演算子は、特に接頭辞と接尾辞の2つの形式が同時に存在する場合にのみ混乱すると信じています。 実際、最後に++ xを使用しなければならなかったのを覚えていないので、それらを取り除くと、Swiftが最初のプログラミング言語として習得しやすくなる可能性があります。

Cのようなループ

このような継承されたループは、Cから借用された別のものfor init; comparison; increment {}削除for init; comparison; increment {} for init; comparison; increment {} for init; comparison; increment {}すると、 ++および--も簡単に削除できます。 しかし、心配しないでください-Swiftには、非常に便利なfor-inループがあります。

 func forLoop() { // : C-  for  //       Swift for var i = 1; i <= 10; i += 1 { print("I'm number \(i)") } //   Swift  : for i in 1...10 { print("I'm number \(i)") } } 


スライス数

それは私が永遠に待っていたものです。 Swift 2.2の配列にはremoveFirst()
関数があります removeFirst()
。 拡張機能自体として簡単に記述することもできますが、現在はすぐに使用できます。 この関数は非常にスマートで、配列にオプションがいっぱいある場合でも、最初の要素を削除するだけで、 nil
ままにしないでください。 nil
。 大好きです。

 func slices() { var array = ["First", "Second", "Third", "Fourth"] array.removeLast() //   , … array.removeFirst() //   ( n-   n-1) } 


タプルの比較

たぶんこれは感覚ではないかもしれませんが、そのような機会がまだ得られていないのは奇妙です。 Swift 2.2以降では、最大6 Equatable
要素を含むタプルを比較できます Equatable


 func tuples() { let tuple1 = (1, true, 3, 4, 5, "a") let tuple2 = (1, false, 3, 4, 5, "a") let equalTuples = tuple1 == tuple2 print(equalTuples) // false } 


カレーはもういらない

カリー化された機能が本当に好きだったらあなたは怒っているかもしれませんが、私は怒っていませんでした。 Swift 2.2では、それらは再考され、もう少し読みやすくなります。

 // :       //    Swift;      func noMoreCurryingThisWay(a: Int)(b: Int) -> Int { return a + b } func curryThisWay(a: Int) -> (Int) -> Int { return { (b: Int) -> Int in return a + b } } 


Swiftバージョンの確認

非常に興味深い機能ですが、頻繁に使用する必要はありません。 一度に2つ(またはそれ以上)のバージョンをサポートするのではなく、Swift 2互換コードをSwift 2.2にリファクタリングすることを好みます。 ただし、場合によっては、この機能が役立つことがあります(たとえば、2.0および2.2、場合によっては3.0でも動作するフレームワークを作成します)。 試してみてください。

 func swiftVer() { var cuteNumber = 7 #if swift(>=2.2) print("Good morning, I'm brand new Swift") cuteNumber += 1 #else print("Hi, I'm elder than my brother, but can ++") cuteNumber++ #endif //  , '#if swift'      Obj-C, //   -  '#available'.      '#'. //  ,    ,    : /* if #swift(>=2.2) { } else { } */ } 


セレクター

私が避けている別のマクロのトリック。 Swift 2.2では、セレクターを文字列として指定できません。 公開討論では、 #selector
が選択されました #selector
Selector()
ではありません Selector()
これはインスタンス化に似ています(また望ましくありません)。 実際、このオプションは自動補完のおかげで、単なる文字列よりも優れています。 タイプミスの可能性は最小限です。

 func selector() { let button = UIButton() // :      Objective-C // ;    '#selector' button.addTarget(self, action: "forLoop", forControlEvents: .TouchUpInside) //    '#selector'   button.addTarget(self, action: #selector(forLoop), forControlEvents: .TouchUpInside) } 


おわりに

これらはSwift 2.2で期待されるすべての変更ではありませんが、私の意見では、最も重要な変更です。 公式のSwiftの変更ログ (これは実際には単なる「ロードマップ」ですが)と、AppleのGitHubの迅速な進化セクションをご覧になることをお勧めします。ここでは、言語の進化に関するすべての提案が表明されます。

私はこのイベントの発展に非常に刺激を受けており、将来の変化を楽しみにしています。 Swiftはモダンでクールです。 Obj-Cに勝ちたいのなら、あなたはモダンでなければなりません。 1972年以来使用されているこれらのCのようなループを取り除くには、決意が必要です。 最高を期待しましょう!

Source: https://habr.com/ru/post/J277857/


All Articles