Swift 2で要求バージョンの指定・実行環境バージョンの確認を行う(#availableと@available)
記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
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を使うことで、プラットフォームの特定のバージョンを要求するコードをキレイに分かりやすく書くことができます。
関連記事
この記事が気に入ったら「いいね!」しよう
Twitterで更新情報をゲット!