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

関連記事

I20160128-101452.jpg

【解決】Playground execution terminated because the process stopped unexpectedlyが出た時の対処法

Xcodeのプレイグラウンドで「Playground execution terminated

記事を読む

I20151122-213340.jpg

【入門本】詳細! Swift 2 iPhoneアプリ開発 入門ノート Swift 2 + Xcode 7対応

ソーテック社より「詳細! Swift 2 iPhoneアプリ開発 入門ノート Swift

記事を読む

20140810-193043.jpg

WordPressでObjective-Cのソースコードをキレイに整形して表示する方法

WordPressの記事内で、Objective-Cのソースコードをキレイに整形して表示する方法

記事を読む

20140807-182914.jpg

【アプリ開発】iOS 8とiOS 7でUIAlertController・UIAlertView・UIActionSheetを切り替えて使う方法

@akio0911です。今までお世話になったUIAlertViewとUIActionShee

記事を読む

20140901-120049

デザイン初心者な僕がデザイナーさんにそこそこ褒められるアプリアイコンを作った方法

デザイン初心者の僕がアプリアイコンを作ったら、本職のデザイナーさんにそこそこ褒められるという嬉しい体

記事を読む

20160423-124300.jpg

【RxSwift】Hot変換オペレータの1つであるshareReplayを使ってみる

最近、RxSwiftについて勉強中です。 今回は、Hot変換オペレータの1つであるshareR

記事を読む

20160807-113229.jpg

UITableViewのリサイズに合わせて一番下のセルを常に一番下に表示する方法

一番下のセルを表示している状態でUITableViewの下端を上に移動させると一番下のセルが隠れ

記事を読む

I20151201-120520.jpg

【Swift 2】switch内にてguardでbreakする

Swift 2のguard内ではreturnしないと文法エラーとなりますが、実はswitch

記事を読む

20150522-105524.jpg

【書籍】初心者にオススメな本!「これからはじめる Apple Watchアプリ開発入門」

Apple Watchは買いましたか?使ってますか?アプリを作ってみたくはないですか? という

記事を読む

I20160204-120840.jpg

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

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

記事を読む

【HomeKit】家の照明をSiriで制御できるようにしてみた

Apple製品と家電を連携するシステム「HomeKit(ホーム

【メンズネイル】新宿区大久保のサロンでターコイズとピンクのメタルネイルにしてもらった

2016年10月22日、いつもお世話になっているネイルサロン「

[iOS][Swift]スタックトレース(コールスタック)を表示する2つの方法

iOSアプリ開発で、スタックトレース(コールスタック)を表

【使い方】iOS 10のSiriで出来る事299個をまとめてみた

そろそろiOS 11がリリースされそうな雰囲気ではありますが、iO

【メンズネイル】新宿区大久保のサロンでハーレイ・クインがテーマのネイルにしてもらった

2016年9月27日、いつもお世話になっている「Total b

→もっと見る

PAGE TOP ↑