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

関連記事

20160416-142928.jpg

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

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

記事を読む

I20160119-155700.jpg

Xcodeで80文字目のところにガイドラインを表示する方法

Xcodeで80文字目のところに線(ガイドライン)を表示する方法について解説します! 「ソース

記事を読む

I20150924-010943.jpg

Swift 2.0で追加されたOptionSetTypeがなかなか便利

Swift 2.0で追加されたOptionSetTypeプロトコルがなかなか便利なので紹介し

記事を読む

I20160204-120840.jpg

Swiftでプロトコル型に対して===演算子を使いたい時の対処法

プロトコル型の変数や定数に対して===演算子を使うと「error: binary opera

記事を読む

I20150722-185359.jpg

【書籍】12のパターンで学ぶ本「iOSアプリ開発 AutoLayout徹底攻略」

     Auto Layoutの使い方について解説されている本「iOSアプリ開発 A

記事を読む

I20151119-165939.jpg

Swift 2.1に対応した本「詳解 Swift 改訂版」が出るぞ!

Swiftの文法に関する解説書の定番「詳解 Swift」の、Swift2.1に対応した改訂版「詳

記事を読む

I20160126-141427.jpg

Swift 2でtoIntが使えない!unavailableエラーが出た時の対処方法

Swift 2でtoInt()を使うと、 'toInt()' is unavailable:

記事を読む

20160420-180135.jpg

【RxSwift】2つのUITextFieldに入力された数値の合計をUILabelに表示する

そろそろRxSwiftについて学び始めよう!ということで、まずは2つのUITex

記事を読む

20141224-231137.jpg

【Swift】Auto Layoutで特定のデバイス・画面サイズの時だけ制約を変更する方法

Auto Layoutで、特定のデバイスや画面サイズの時だけ制約を変更する方法について紹介したい

記事を読む

I20160228-162014.jpg

詳解 Swift 改訂版のKindle版が発売。リフローに対応!

今日気付いたんですが、「詳解 Swift 改訂版」のKindle版がいつの間にか発売されていまし

記事を読む

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 ↑