Swiftでクラス変数を作る方法

Swiftでは今のところクラス変数を持つことができません。

代替案として以下のような書き方でクラス変数の様に利用できます。

class Company {
    // Class variables not yet supported
//    class  var name = ""
    
    // 代替案
    private struct ClassProperty {
        // stuctでは静的変数の宣言が可能
        static var name = "defaultName"
    }
    
    // Computed Property
    class var name: String {
        get {
            return ClassProperty.name
        }
        set {
            ClassProperty.name = newValue
        }
    }
}

var aCompany = Company()
println(Company.name) // defaultName
        
Company.name = "newName"
println(Company.name) // newName


Computed Propertyとは直訳すると計算変数という意味になります。

その名の通り、変数として値を持つわけではなく、

関数のようにして使うことができるのです。

 

上の例ではnameという変数の値を取り出そうとしたときに

get以下の部分が実行され、実際にはClassPropertyのname変数の値を返します。

setも同様にClassPropertyのname変数に値を格納します。

 

setの波括弧内に「setValue」という見慣れない変数がありますが、

これは「Company.name = 値」の形でアクセスしたときに

上記の例でいう「”newName”」が「setValue」の値として渡されます。

 

Swiftではクラスメソッドを以下の様にして書きます。

class func classFunction() {
    println("hoge")
}

 

この書き方を踏襲するとクラス変数は

// Class variables not yet supported
class var companyName = "xxx inc."

と書けそうですが、現状では「not yet supported」ということです。

近いうちに実装されるかもしれません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です