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も定義できます.つまり,クラス変数に値のセットもできるようになりますね.