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コード)

関連記事

I20160201-112159.jpg

ライブラリ管理ツールCarthageのCartfileの書き方

iOS(Cocoa)ライブラリ管理ツール「Carthage」で使用するCartfileの書き方を

記事を読む

I20160417-171311.jpg

Xcodeのブレークポイントで変数の中身を通知センターに表示してみる

Xcodeのブレークポイントの機能を使って、ブレークポイントを通過した時点での変数の中身を通知セ

記事を読む

I20160124-111228.jpg

初心者がデザインを勉強するなら、まずこの本を読むといいかも

まず僕のスペックから話をすると、 アプリのコードを書いたり、ブログを書いたりしている

記事を読む

I20151202-232710.jpg

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

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

記事を読む

20141227-125250.jpg

実践的な内容まで載っている!開発のプロが教える Swift標準ガイドブック

株式会社マイナビ様より「開発のプロが教える Swift標準ガイドブック」の見本紙を頂きました。早

記事を読む

20150409-103620.jpg

描いたベクターグラフィックをSwift/Objective-Cコードに変換できる「Paint Code 2」

引用元 : PaintCode ベクターグラフィックを描き、それを描画するためのSwift

記事を読む

I20150808-104713.jpg

【Xcode】シミュレーターリストの表示がおかしくなった時の解決方法

Xcodeのシミュレーターリストの表示が、上のスクリーンショットのようにおかしくなってしまっ

記事を読む

I20160210-140020.jpg

【Xcode】モーダル表示で遷移先へ値を渡す時のハマりポイント

モーダル表示で遷移先の画面へ値を渡す際、最初はハマりやすいポイントについて解説したいと思いま

記事を読む

20140916-130550

Swiftの列挙型、switch文、網羅性チェックが素晴らしい!

アップルの新プログラミング言語「Swift」をちょっとずついじってるんですが、列挙型とswitch文

記事を読む

iPhoneゲームを簡単に開発したいならこの本がオススメ!「Sprite Kit iPhone 2Dゲームプログラミング」

iPhoneゲームアプリを簡単に開発したいなら「Sprite Kit iPhone 2Dゲームプ

記事を読む

I20170228-002742.jpg
約3ヶ月で体脂肪率を6.2%も落とせたキッカケについて

(右上の赤枠内がダイエット開始前、左下の赤枠内が3ヶ月後の数値

I20161224-174949.jpg
「季節の野菜を直接配送!季節のスムージー」を買ってみた

「FiNCモール」で、「季節の野菜を直接配送!季節のスムージー」を

I20161002-152537.jpg
【メンズネイル】東京・新宿のネイルサロンでマットネイルしてもらった

2016年7月18日、東京・新宿のメンズOKなネイルサロン「Tot

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

UITabBarControllerで、タブバーアイコン非選択時の

I20160924-123726.jpg
iPad Pro 9.7インチ SIMフリーモデルにFREETELのSIMを入れて使ってみた

今までiPad miniで使っていたFREETELのSIM

→もっと見る

PAGE TOP ↑