読者です 読者をやめる 読者になる 読者になる

tomoyaonishiのブログ

iOSのことを中心に・・・その他もあるよ!

SwiftのAttributesをまとめた。

Swiftには定義や型に対して情報を補足するAttributesというものがあります。 Objective-CのNS_AVAILABLE_IOS(8_0)みたいなやつです。

Attributesのフォーマットは引数なしと引数ありの2通りです。

@attributename
@attributename(arguments)

@availability

利用できるプラットフォーム、OSなどを示します。

第1引数はプラットフォーム名で

  • iOS, iOSApplicationExtension, OSX, *

の4つのうちのどれかを指定します。*はワイルドカードで全てのプラットフォームを表します。

第2引数以降はいろいろな組み合わせがあります。

  • unavailable

利用不可能であることを示します。この属性がついたものを利用しようとするとコンパイラがエラーを吐きます。

@availability(iOS, unavailable)
func unavailableMethod() {
}

f:id:tomoyaonishi:20150320180035p:plain

  • introduced="version number"

指定されたバージョンから利用可能であることを示します。

@availability(iOS, introduced=6.0)
func shouldAutorotate() -> Bool
  • deprecated="version number"

指定されたバージョン以降で非推奨であることを示します。

@availability(iOS, introduced=3.0, deprecated=8.0)
var searchDisplayController: UISearchDisplayController? { get }
  • obsoleted ="version number"

指定されたバージョンから使われなくなり、そのプラットフォームから取り除かれていることを示します。対象のプラットフォーム、バージョンのときこの属性がついたものを利用しようとするとコンパイラがエラーを吐きます。

f:id:tomoyaonishi:20150320175728p:plain

  • message

deprecatd, obsoletedと一緒に用いて、コンパイラがワーニングやエラーを出すときにこのメッセージを表示します。

  • renamed

unavailableと一緒に用いて、新しい名称にリネームされたことを示します。

@availability(*, unavailable, renamed="AfterClass")
class BeforeClass {

}

class AfterClass {

}

f:id:tomoyaonishi:20150322134652p:plain

@NSCopying

Objective-Cの@property(copy)と同じです。型はNSCopyingプロトコルに適応していなければいけません。

@objc

Objective-Cからも呼び出せるようにします。

@objc class CustomObject {
    
}

以下のように引数を指定すればObjective-Cからは()内の定義で呼び出せます。

@objc(ObjCObject)
class CustomObject {
    
    var editing: Bool {
        @objc(isEditing) get {
            return true
        }
        set {
        }
    }
    
}

@autoclosure

引数なしかつ評価値を返す式を自動でクロージャにラップします。簡単な遅延評価を行いたいときに便利です。XCTAssert系で使われていますね。


その他は割愛します。

@NSApplicationMain

@UIApplicationMain

@noreturn

@NSManaged

@IBAction

@IBOutlet

@IBDesignable

@IBInspectable


Objective-C版はこちら tomoyaonishi.hatenablog.jp


ドキュメント developer.apple.com