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

関連記事

20141031-150402.jpg

アップルのベータテストサービス「TestFlight」が正式公開

アップルが先週の木曜、ベータテストサービス「TestFlight」を正式に公開しました。 Te

記事を読む

20140721-170305.jpg

プロトタイピングのツールや手法を学べる「プロトタイピング実践ガイド」

株式会社インプレスさまより献本御礼。 プロトタイピング実践ガイド スマホアプリの効率的なデザイ

記事を読む

I20160125-104438.jpg

iPhoneアプリの開発に必要なものをまとめてみた

僕はアプリ開発講座を開催していますが、その関係もあって「iPhoneアプリを開発するには、ど

記事を読む

20141222-120336.jpg

【Swift】PlaygroundでUIImageに画像を読み込む方法

SwiftのPlayground内にて、UIImageに画像ファイルを読み込む方法を紹介しま

記事を読む

I20150724-135442.jpg

iPhoneのホーム1画面目に置いているオススメなアプリ38本(2015年9月版)

2014年7月に「iPhoneアプリ開発にオススメの本10選(2014年7月版)」という記事

記事を読む

I20160505-011515.jpg

iOS 9以降で使えるReadable Content Guideを試してみた

iOS 9から追加されたReadable Content Guide(readableConte

記事を読む

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

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

記事を読む

I20160925-163452.jpg

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

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

記事を読む

I20160129-115948.jpg

【対処法】Swift 2(iOS 9)ではUITextFieldのtextがString?になっている

Swift 1(iOS 8)時代において、UITextFieldのtextプロパティは va

記事を読む

I20151102-201945.jpg

Swift 2の文法を学べるオススメ本「Swift 2標準ガイドブック」

Swift 2の文法について学べる書籍「Swift 2標準ガイドブック」が発売されたので、紹介し

記事を読む

PAGE TOP ↑