Swift 2で要求バージョンの指定・実行環境バージョンの確認を行う(#availableと@available)

公開日: : 最終更新日:2016/02/10 iPhoneアプリ開発

20151107-111928.jpg

Swift 2で追加された#available, @availableの使い方についてメモしておきたいと思います。

    

スポンサード リンク

関数やクラスなどが、どのバージョンを要求するのかを明示できる

関数やクラスなどを作った際、それがそのプラットフォームのどのバージョンを要求するのかを明示できます。

@available(iOS 8, *) // iOS 8以降を要求
func f8() {
    
}

@available(iOS 9, *) // iOS 9以降を要求
func f9() {
    
}

@available(iOS 10, *) // iOS 10以降を要求
func f10() {
    
}

なお、以下のように

@available(iOS 9)
func f9() {
    
}

“, *” なしで記述をすると、ビルド時に「Must handle potential future platforms with ‘*’」というビルドエラーが出ます。

    

Deployment Targetと呼び出しているメソッドのチェックを行ってくれる

@availableを使うことにより、ビルド時にDeployment Targetと呼び出しているメソッドのチェックを行ってくれます。

例えば、Deployment Targetを9.0に設定している状態で以下のようなコードを書くと、

f8()
f9()
f10()

f10の呼び出しに関して、「’f10()’ is only available on iOS 10 or newer」というビルドエラーを出してくれます。

    

実行環境のバージョンによって処理を分岐できる

ifやguardにて#availableを使うことで、実行環境のバージョンによって処理を分岐させることができます。

例えば以下のようなコードを書くことができます。

if #available(iOS 8, *) { // iOS 8以降の時のみ実行
    f8()
}
if #available(iOS 9, *) { // iOS 9以降の時のみ実行
    f9()
}
if #available(iOS 10, *) { // iOS 10以降の時のみ実行
    f10()
}

    

Appleが提供しているAPIでも@availableが指定されている

Appleが提供しているAPIでも、@availableが指定されています。

例えばViewControllerのaddKeyCommandメソッドの宣言は以下のようになっています。

extension UIViewController {
    @available(iOS 9.0, *)
    public func addKeyCommand(keyCommand: UIKeyCommand)
}

よって、このaddKeyCommandメソッドを使った場合、プロジェクトのDeployment Targetが9.0よりも前に設定されていると「’addKeyCommand’ is only available on iOS 9.0 or newer」というビルドエラーが出ます。

この場合は以下のように#availableを使うことで、

if #available(iOS 9.0, *) {
    let command = UIKeyCommand()
    self.addKeyCommand(command)
}

iOS 9以降の時のみにaddKeyCommandを使うというコードを書くことができます。

    

@akio0911はこう思った。

@availableと#availableを使うことで、プラットフォームの特定のバージョンを要求するコードをキレイに分かりやすく書くことができます。

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

follow us in feedly

Feedlyで最新記事を購読

Twitterで更新情報をゲット!

LINEでご感想・ご要望お送りください!
(スマホでLINEを起動 > 友だち追加 > QRコード)

関連記事

I20150805-182005.jpg

Swiftにおける関数型のエッセンスを学ぶために「関数プログラミング実践入門」を読み始めた

Swiftの関数型言語的な特徴についての話を各所で見るようになりましたが、自分は関数型言語の

記事を読む

I20160409-211651.jpg

Xcode 7.3の新機能についてまとめてみた

2016年3月22日にXcode 7.3がリリースされましたが、自分が知らない機能があるかもしれ

記事を読む

I20151202-232710.jpg

【Swift 2】配列(Array)を初期化する方法

Swiftで配列(Array)を初期化する方法についてまとめてみたいと思います!   

記事を読む

I20160102-131507.jpg

Swift 2の文法が分かるオススメ本「詳解 Swift 改訂版」

Swift文法書の定番とも言える、荻原 剛志さんの「詳解 Swift」。 Swiftの文法をキ

記事を読む

I20151031-175009.jpg

初心者にオススメの本!Swiftではじめる iPhoneアプリ開発の教科書【Swift 2&Xcode 7対応】

     Xcode 7とSwift 2に対応したアプリ開発の入門書籍「Swiftでは

記事を読む

20160416-142928.jpg

Swift 2.2で可能になったタプルの比較を試してみる

Swift 2.2でタプルの比較が行えるようになったので、色々と試してみました。   

記事を読む

エディタのショートカット・Auto Layout・ブレークポイントに関する詳しい解説も!「Xcode5徹底解説」

著者の@es_kumagaiさんより献本御礼。iOSアプリ開発に用いるツール「Xcode 5」の

記事を読む

Auto LayoutやStoryboardの仕組みをしっかり理解できる!「UIKit徹底解説」

インプレスジャパン様より献本御礼。UIKit周りを中心に、「Auto Layout」「Story

記事を読む

20150104-120413.jpg

【おすすめ本】Swiftではじめる iPhoneアプリ開発の教科書【iOS 8&Xcode 6対応】

     入門者にオススメな、Swift&Xcode 6の入門書「Swiftではじめる

記事を読む

I20160925-163452.jpg

タブバーアイコン非選択時の色を変更する方法【iOS 10】

UITabBarControllerで、タブバーアイコン非選択時の色を変更する方法を紹介します!

記事を読む

I20170521-225453.jpg
東京駅八重洲口の「羊肉酒場 悟大」で網焼きジンギスカンを頂きました!

ゆうせいさんと株式会社 大庄さんからご招待頂き、悟大withサッポ

I20170514-165235.jpg
iPhoneと連携できる体重体組成計「Withings Body Cardio」を使ってます

ジムに通い始めて体脂肪率が落ち始めたのをキッカケに、iPhoneと

I20170507-155440.jpg
【派手髪】ハーレイクイン風の髪色に染めてもらいました

2016年10月20日、ハーレイクイン風の髪色に染めてもらいました

I20170504-173110.jpg
【メンズネイル】東京・新宿のネイルサロンでターコイズのホログラムネイルしてもらった

ネイルネタが1年分くらい溜まっているので、ちょっとずつ書いていこう

I20170502-010117.jpg
SNUGGのライトニングケーブルが耐久性高し。8ヶ月使ってますが断線の気配なし!

iPhoneの充電&転送ケーブルであるLightningケーブルっ

→もっと見る

PAGE TOP ↑