日々精進

新しく学んだことを書き留めていきます

ObjCで定義したクラスを継承したクラスをswiftで定義した時に、インスタンスがswiftで定義したクラスの型にならない場合がある

hosokawa0825/THLoadXibView · GitHubを使ってswiftでViewクラスを定義した。
継承構造は以下。
UIView > THLoadXibView > MySwiftView
ObjC側コードで以下のようにしてMySwiftViewインスタンスを作ると、実行時型もMySwiftViewになる。

MySwiftView *v = [[MySwiftView alloc] init];

しかし、MySwiftViewをXIB内のUIViewのClassに設定し、XIBからインスタンスを作ると、実行時型がUIViewになってしまう。
原因は、swiftで定義したクラスにinit(coder aDecoder: NSCoder!)を定義していなかったこと。
swiftで定義したクラスの場合、イニシャライザが定義されているクラスの型が実行時型になるのかも。。
そうすると、親クラスで定義されているイニシャライザはすべて以下のようにoverrideしないといけないので不便だと思うが。。これはバグなのかな。

    init(coder aDecoder: NSCoder!) {
        super.init(coder: aDecoder)
    }