Swift 2.2の変更点をまとめてみた

公開日: : 最終更新日:2016/04/16 iOSアプリ開発

記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

20160411-122213.jpg

2016年3月22日、Xcode 7.3と共にSwift 2.2が正式にリリースされました。

Swift 2.2における変更点についてまとめておきたいと思います。

    

タプルを比較できるようになった(ただし条件付き)

20160411-131400.jpg

タプル同士を比較できるようになりました。以下の条件を満たす必要があります。

  • タプルの要素数が同じであること
  • 個々の要素がEquatableであること(==や!=の場合)
  • 個々の要素がComparableであること(<や>などの場合)

また、タプルの要素数は6以下である必要もあります。

    

#selector

20160411-134401.jpg

Selector型の指定は今まで文字列リテラルで行ってきましたが、Swift 2.2では#selectorが導入され、存在しないメソッドを指定するとコンパイルエラーが出てくれるようになりました。

    

Cスタイルのforループ

20160411-125842.jpg

「for 初期化; 比較; インクリメント {}」のようなCスタイルのforループは、Swift 2.2では警告となります。

C-style for statement is deprecated and will be removed in a future version of Swift

かわりにfor … inなどを使いましょう。

ちなみにSwift 3.0では削除される予定です。

    

++演算子、–演算子

20160411-130215.jpg

a++ と ++a で挙動が異なるなど扱いが難しい演算子ということもあり、Swift 2.2では以下のような警告となります。

‘++’ is deprecated: it will removed in Swift 3

Swift 3.0で削除される予定です。早めにa += 1 などに書き換えましょう。

    

関数の引数のvar

20160411-130744.jpg

Swiftにおいて関数の引数はデフォルトでlet扱いであり、varキーワードを指定することで変更もできましたが、Swift 2.2でvarを使うと警告となります。

‘var’ parameters are deprecated and will be removed in Swift 3

Swift 3では削除される予定です。

    

Raw typeがIntなenumに@objcを付けられる

20160411-131058.jpg

Raw typeがIntなenumについては、@objcを付けることでObjective-Cから見えるようになります。

    

引数ラベルに予約語が使える

20160411-132613.jpg

関数の引数ラベルとして、「inout」「var」「let」を除くほとんどの予約語(forやinなど)が使えるようになりました。

関数やメソッドをより分かりやすくするのに役立ちそうです。

    

#file, #line, #column, #function

20160411-133126.jpg

Swift 2.1までは

  • __FILE__
  • __LINE__
  • __COLUMN__
  • __FUNCTION__

が利用可能でしたが、Swift 2.2では警告となります。

20160411-133453.jpg

__FILE__ is deprecated and will be removed in Swift 3, please use #file
__LINE__ is deprecated and will be removed in Swift 3, please use #file
__COLUMN__ is deprecated and will be removed in Swift 3, please use #file
__FUNCTION__ is deprecated and will be removed in Swift 3, please use #file

かわりに以下の4つが新設されました。

  • #file
  • #line
  • #column
  • #function

    

associatedtypeキーワード

20160411-133826.jpg

プロトコルのassociated typeを指定する時、今までどおりtypealiasを使うと以下の様な警告が出来るようになりました。

Use of ‘typealias’ to declare associated types is deprecated; use ‘associatedtype’ instead

かわりに新設されたassociatedtypeキーワードを使いましょう。

20160411-134006.jpg

    

引数ラベルまで指定して関数を参照できる

20160411-135707.jpg

引数ラベルのみが異なる複数の関数があっても、引数ラベルを利用して個々の関数を参照できるようになりました。

    

Swiftのバージョンを指定して分岐

20160411-140019.jpg

Swiftのバージョンを指定して分岐させることができるようになりました。

当てはまらないほうに関してはコンパイラによって処理されないので、エラーなどは発生しません。

    

@akio0911はこう思った。

タプルが比較できるようになっていたり、#selectorでメソッドの存在チェックをコンパイル時に行ってくれるようになったのが個人的には嬉しいですヽ(・∀・)ノ

↓ Kindle版がリフローで出たので、iPhoneやiPadで少しずつ読み進められて便利です。

    

この記事を書いた人
あきお(@akio0911
派手髪iOSエンジニア。Twitterアカウントは@akio0911。YouTubeチャンネル「あきおチャンネル」にてiOSアプリ開発講座を公開中。著書に「iPhoneアプリ開発レシピ」「cocos2d for iPhoneレッスンノート」など。iOSアプリ開発をテーマとしたオンラインサロン「アプリ道場サロン」を運営。東京・大阪にてアプリ開発講座「アプリクリエイター道場」を主催。

関連記事

この記事が気に入ったら「いいね!」しよう

Twitterで更新情報をゲット!

PAGE TOP ↑