hachinoBlog

hachinobuのエンジニアライフ

Swiftのインスタンスから型メソッド(クラスメソッド)を呼び出す方法

背景

あるクラスのインスタンスから、そのクラスの型メソッド(クラスメソッド)を呼び出したいときにObjective-Cでは下記のようにやっていたけれどSwiftだとどう書くのか知りたかった

[[instance class] classMethod];

結論

dynamicTypeを使うことでインスタンスから型メソッド(クラスメソッド)へのアクセスが可能になる

class SampleClass() {

  //型メソッド(クラスメソッド)
  static func sampleClassMethod() {
    print("sampleClassMethod")
  }

}

//普通の型メソッド(クラスメソッド)の呼び出し方
SampleClass.sampleClassMethod()  //sampleClassMethod

//インスタンスからクラスメソッドへのアクセス
let sampleClass = SampleClass()
sampleClass.dynamicType.sampleClassMethod() //sampleClassMethod

dynamicTypeとはなんぞや?

dynamicTypeを使うとインスタンスのクラス自身(サブクラス化されていればサブクラス)が参照できるようです

let sampleClass = SampleClass()
print(sampleClass.dynamicType) //SampleClass

if sampleClass.dynamicType == SampleClass.self {
  print("true") //true
}