しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

Swift再入門33 − The Swift Programming Languageを読んでみる

この記事では「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 {}

f:id:llcc:20151111224122p:plain

obsoletedを使うとそのバージョン以上ではエラーが出てコンパイルできなくなります。

@available(*, obsoleted=9.1)
class MyClass {}

unavailableを使うと利用不可能になります。

@available(*, unavailable)
class MyClass {}

renamedを使うとそのクラスを使うように促されます。

@available(*, unavailable, renamed="MyClass2")
class MyClass {}

f:id:llcc:20151111223816p:plain

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としなくて良い
        }
    }
}