required(feat.Initializer自動継承)
3363 ワード
UIViewController
の初期化器を継承するCustom ViewConに再定義すると、override
ではなくrequired
を使用する必要がある騒ぎが発生します.これは必要ですか?では、どうして子供のクラスでこれを実現しなくても帰るのですか.
まずinitializerに興味のある人のために正式な書類を投げます
required initializer
実際、特に何もありません.継承関係では、すべてのサブclassが
「サブクラス、このようなパラメータリストを受け入れる初期化器は必ず実現しなければならない」と言える.
例を見てみましょう
class ABC {
var a: Int
required init() {
self.a = 1
}
}
class DEF: ABC {
var b: Int
required init() {
self.b = b
super.init()
}
}
上記の例のrequiredの目的ABC
クラスはrequired
キーワードによりパラメータを受け入れない初期化器を実現し,サブクラスが実現しなければならないことを要求する.また,サブクラス
DEF
も実現し,コンパイルエラーは発生しなかった.上記の例では、requiredの使用方法について説明します.
パラメータリストが同じであるため,本来は
override
キーワードを用いるべきであったが,required
キーワードに代わって詳細については、本書を参照してください.
自動継承Initializer
required
と言ったときになぜ急に自動継承と言うのですか?UIViewController
の初期化器は、required
として宣言される.ただし、サブクラスcustom viewconで再定義しなくてもコンパイルエラーは発生しません.
どうしてこんなことになったの?
結論から言えば、
「自動継承」親のinitializerの条件下で、サブクラスは
required
initializerを実現する必要はありません.(親を使用)
自動継承条件について説明します.
自動継承の親のイニシエータの条件
基本的にinitializerは親から継承されない特徴があります
それでも、初期化器は、特定の条件を満たす限り自動的に継承されます.
(この特定の条件は意外に頻繁に発生します)
📌 ルール1:サブクラスのイニシエータがない場合
この場合、親の初期化器は自動的に継承されます.
そのためrequiredを別途実現する必要はありません
📌 ルール2:条件を満たす場合に自動的に継承できる便利さ
(これはrequiredとは関係ありませんが、特別です^^;)
サブクラスで親のデザインをすべて実現すると、親の利便性を自動的に継承する機能があります
n/a.結論
要するに、
UIViewController
をrequired
と定義したinitializerは、私たちのcustom viewconでinitializerを再定義する必要はありません.なぜなら、initializerが作成されていないため、自動継承が発生するからです.Reference
この問題について(required(feat.Initializer自動継承)), 我々は、より多くの情報をここで見つけました https://velog.io/@yohanblessyou/required-feat.-Initializer-자동상속テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol