質問: NSObjectの派生クラスは、UIView()やUIViewController()のようにすると初期化することができますよね? この引数のないinit()はNSObjectで定義された指定イニシャライザのようですが、このinit()がどういう仕組みになってるのかいまいち理解できません。 ``` class SubUIView: UIView { override init(frame: CGRect) { super.init(frame: frame) print(frame) } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } SubUIView() ``` Playgroundで上のように記述すると、initWithFrame:のprint文が出力され、init()からinitWithFrame:が呼び出されてるように見えます。 つまりこれは、UIViewはNSObjectのinit()を簡易イニシャライザとしてオーバーライドして、間接的に自身の指定イニシャライザを呼び出してるということでしょうか? 他のNSObject派生クラスでも「クラス名()」で初期化できるものは、「init()を簡易イニシャライザとしてオーバーライドして、間接的に自身の指定イニシャライザを呼び出してる。」という解釈であってますでしょうか? 書いてるうちにややこしくなってしまって、申し訳ないのですが回答よろしくお願いします。
回答: UIView()やUIViewController()と書いて初期化されるのでは、Swift言語の仕様です。 また、init()はイニシャライザであり、関数でもメソッドでもありません。これもSwift言語で定義されています。 NSObjectクラスを継承しているかどうかは関係ありません。