swiftのクラス変数

swiftは未だにクラス変数が定義されていない.
Class variables not yet supportedと言われます.


これは待ってればそのうち実装されるってことなんですかね?


とりあえず現状で代替案の実装をしてみましょう.

構造体に値を持たせてgetする

クラス変数はstaticな値を持てませんが,構造体は持てます.

そこで,構造体にstaticな値を持たせて,それをgetするようなクラス構造体を作ります.
すると,アクセスする側的には,クラス変数へのアクセスと同じメソッドに見えます.

class TestClass: NSObject {
  // クラス変数として保存しておく値
  private struct ClassProperty {
    static let TestValue = Int(10)
    static let DefaultValue = Int(30)
  }

  class var TestValue: Int {
    get {
      return ClassProperty.TestValue
    }
  }

  class var DefaultValue: Int {
    get {
      return ClassProperty.DefaultValue
    }
  }
}

こんな定義にしておきます.

呼び出しは,

println(TestClass.TestValue) // 10
println(TestClass.DefaultValue) // 30


と,こんな形で普通のクラス変数っぽく使えます.



一時しのぎですが,やっぱりクラス変数で実装しておきたいところってありますよね.


インスタンス変数をletで定義するというのもアリですけど……それはそれで意味合いが違う.


ちなみにgetと同時にsetを実装することで,setterも定義できます.つまり,クラス変数に値のセットもできるようになりますね.