はじめに
Swiftではstructやenumおよびclass内からstaticなメンバーにアクセスする際には以下のようにClass名.staticMemberかtype(of: self).staticMemberとする方法がありました。
struct Sample { static var hoge: Int = 0 func sampleFunction() { // クラス名.staticMember let a = Sample.hoge // type(of: self).staticMember let b = type(of: self).hoge } }
Swift5.1でこちらのアクセス方法に変更があったため記載します。
環境設定
以下の環境を使用しています。
- Swift5.1
内容
structやclass, enum内のスコープにおいて、 Self.staticMemberでstaticなプロパティやメソッドにアクセスできるようになりました。 具体的には下記のようになります。
struct Sample { static var hoge: Int = 0 static func fuga() {} func sampleMethod() { // こちらは従来からできました let sampleA = Sample.hoge let sampleB = type(of: self).hoge // swift5.1からこのアクセス方法が可能になっています let sampleC = Self.hoge Sample.fuga() type(of: self).fuga() // メソッドにも同様にアクセス可能です Self.fuga() } } class ClassSample { static var hoge: Int = 0 class func fuga() {} func sampleMethod() { // classでも同様にアクセス可能です let sampleA = Self.hoge Self.fuga() } }
まとめ
プロポーザルにも記載がありますが、 インスタンスのselfに対応する形でメソッドやプロパティにアクセスすることができ、理解しやすくなったのではないかなと感じています。参考に元のプロポーザルへのリンクを記載していますので是非ご確認ください。