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
}