この記事では「The Swift Programming Language」を1から読んだ感想とか発見を書いてみようと思います。
「The Swift Programming Language」とはSwiftの公式ドキュメントでiBooksや下ページで見る事ができます。
The Swift Programming Language (Swift 2.1): About Swift
読んだ所
今回はAttributes
という項目を読みました。
The Swift Programming Language (Swift 2.1): Attributes
学んだこと
@availableの使い方
@availableは特定バージョン以上のOSでしか利用できなくする記法です。
特定バージョン以下のOSでは#available(iOS 9.1, *)
を使った分岐が必要です。
@available(iOS 9.1, OSX 10.10, *) class MyClass { @available(iOS 9.1, OSX 10.10, *) func method() {} } if #available(iOS 9.1, *) { MyClass() } if #available(iOS 9.1, *) { MyClass().method() }
introducedでも同じ結果になります。
@available(*, introduced=9.1) class MyClass {}
deprecatedを使うと警告を出せます。
@available(*, deprecated=9.0) class MyClass {}
obsoletedを使うとそのバージョン以上ではエラーが出てコンパイルできなくなります。
@available(*, obsoleted=9.1) class MyClass {}
unavailableを使うと利用不可能になります。
@available(*, unavailable) class MyClass {}
renamedを使うとそのクラスを使うように促されます。
@available(*, unavailable, renamed="MyClass2") class MyClass {}
messageを使うと警告メッセージをカスタマイズできます。
@available(*, deprecated=9.0, message="MyMessage") class MyClass {}
@warn_unused_result
@warn_unused_resultを付けると戻り値が使われない場合に警告が出ます。
class MyClass { @warn_unused_result func method() -> Int { return 1 } } MyClass().method() // _ = MyClass().method()としないと警告がでる
@noescape
@noescapeを使うとクロージャーの外側の変数にselfを付けずにアクセスできます。
@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func myMethod(@noescape closure: () -> Void) { closure() } func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { myMethod { _ in window // self.windowとしなくて良い } } }