1. ホーム
  2. swift

[解決済み] swiftにおけるconvenience initとinitの違いは何ですか、より良い明示的な例

2022-02-18 10:13:16

質問

の違いというか、目的がよくわからなくて困っています。 convenience init .

解決方法は?

標準的な init :

指定イニシャライザーは、クラスの主要なイニシャライザーです。A 指定されたイニシャライザーは そのクラスは、適切なスーパークラスのイニシャライザーを呼び出して、継続します。 初期化処理はスーパークラスの連鎖で行われます。

convenience init :

便利なイニシャライザーは、二次的なものであり、そのイニシャライザーをサポートするものです。 クラスがあります。コンビニエンス・イニシャライザーを定義すると、指定された コンビニエンス・イニシャライザーと同じクラスから、いくつかの のパラメータはデフォルト値に設定されます。また また、コンビニエンス・イニシャライザーを定義すると、そのクラスのインスタンスを作成することができます。 特定のユースケースや入力値のタイプに対応するためです。

につき Swift ドキュメント

簡単に言うと、コンビニエンス・イニシャライザーを使うことで、指定されたイニシャライザーをより速く、より便利に呼び出すことができるということです"quot; 。つまり、コンビニエンス・イニシャライザーは self.init の代わりに super.init は、指定されたイニシャライザーをオーバーライドする際に見られるようなものです。

の疑似コード例です。

init(param1, param2, param3, ... , paramN) {
     // code
}

// can call this initializer and only enter one parameter,
// set the rest as defaults
convenience init(myParamN) {
     self.init(defaultParam1, defaultParam2, defaultParam3, ... , myParamN)
}

私は、主にデフォルトで長いイニシャライザを持つカスタムビューなどを作成する際に、これらをよく使用します。ドキュメントを見ると、私よりもうまく説明されています。