Swiftがクラスのメンバーごとの初期化子を提供しないのはなぜですか?

動脈瘤

メンバーごとのイニシャライザーが構造体にのみ提供されるのはなぜですか?

イニシャライザーを自分で作成する必要がありますか?

Ole Begemann

イニシャライザーを自分で作成する必要がありますか?

はい。

メンバーごとの初期化子をクラスに拡張し、それらをより柔軟にする提案は、 2015年12月/ 2016年1月のSwiftEvolutionメーリングリストで徹底的議論されました

最終的に、提案さまざまな理由で却下され、後で(Swift 3がリリースされた後に)トピックを再検討する可能性があります。

拒否の中で、Chris Lattnerは、メンバーごとの初期化が構造体専用に提供された理由を少なくとも1つ指摘しました。それは、Vec4またはなどの純粋な「プロパティのバッグ」CGRectを最小限のオーバーヘッドで記述できるためです。

2)メンバーごとの初期化糖は、「POD」タイプやその他の「プロパティのバッグ」タイプ(「Vec4」など)、およびCocoaが持つ多くのC構造体タイプ(CGRectなど)に大きなメリットをもたらします。このような場合、クライアントは初期化を希望することがよくあります。すべてのフィールドを明示的に、メンバーごとのinit提案により、この定型文が排除されます。このケースは、既存の機能がサービスを提供しようとしているものです。

ほとんどのクラスはおそらくもっと複雑であり、メンバーごとの初期化子をより細かく制御する必要があります。これにより、機能もはるかに複雑になります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

コンストラクタ初期化子でconstchar配列メンバーの初期化に互換性がないのはなぜですか?

分類Dev

なぜC ++は、派生クラスが初期化リストで基本クラスのメンバーを使用することを許可しないのですか?

分類Dev

次のメンバー初期化子がC ++で機能しないのはなぜですか

分類Dev

関数内のexternに明示的な初期化子を提供してもexternがオーバーライドされないのはなぜですか?

分類Dev

UIViewサブクラスの場合、CGRect引数で初期化子をオーバーライドすると、引数が空の初期化子が自動的に提供されるのはなぜですか?

分類Dev

基本クラスのメンバーが、コンストラクターで最初に初期化された値を保持しないのはなぜですか?

分類Dev

クラスのメンバーが存在しないのはなぜですか?

分類Dev

const std :: string&をコンストラクターに渡すと、初期化子リストのconst std :: string&メンバー変数にバインドできないのはなぜですか?

分類Dev

正しい初期化を使用しない限り、__ dict__にクラスメンバーが含まれないのはなぜですか?

分類Dev

クラスのメンバー関数でQThreadを初期化できないのはなぜですか?

分類Dev

クラスのメンバー関数でQThreadを初期化できないのはなぜですか?

分類Dev

swiftがCGRect初期化子とCGRectMake関数の両方を提供するのはなぜですか?

分類Dev

C ++ 11クラス内初期化子が括弧を使用できないのはなぜですか?

分類Dev

初期化子、コンストラクター、およびメソッド呼び出しを使用するときに、printステートメントがこの順序で実行されるのはなぜですか?

分類Dev

初期化子リストから(暗黙のコンストラクターを介して)ベクトルを開始するときに、move構文が使用されないのはなぜですか

分類Dev

std :: future <T>とstd :: shared_future <T>がメンバーswap()を提供しないのはなぜですか?

分類Dev

派生クラス変数を初期化し、その基本クラスタイプに割り当てると、そのメンバーへのアクセスが許可されないのはなぜですか?

分類Dev

メンバー初期化子リストを持つデフォルトのctorに= defaultを使用できないのはなぜですか

分類Dev

クラスが宣言するプロトコルを実装している場合、クラスが失敗可能な初期化子を提供する必要がないのはなぜですか?

分類Dev

エラー: LINQ to Entities では、パラメーターのないコンストラクターと初期化子のみがサポートされています

分類Dev

デフォルトで、Swiftの構造体のメンバーごとの初期化子を公開するにはどうすればよいですか?

分類Dev

ネストされたクラスのメンバー関数が完全な型を必要としないのはなぜですか?

分類Dev

Swiftで初期化子をオーバーライドするのはなぜですか?

分類Dev

Flaskがインタラクティブデバッガーを提供しないのはなぜですか?

分類Dev

Flutter-初期化子でクラスメンバーを使用するのはどこが適切ですか?

分類Dev

スーパークラスで宣言された静的メソッドがサブクラスで呼び出されたときに、サブクラスの静的初期化子が呼び出されないのはなぜですか?

分類Dev

LINQ to Entitiesでは、パラメーターのないコンストラクターと初期化子のみがサポートされています。

分類Dev

「配列初期化子は初期化子リストまたは文字列リテラルでなければならない」というメッセージが表示されるのはなぜですか?

分類Dev

コンストラクターでメンバーの初期化を使用して、明示的なコンストラクターの引数を満たすことができるのはなぜですか?

Related 関連記事

  1. 1

    コンストラクタ初期化子でconstchar配列メンバーの初期化に互換性がないのはなぜですか?

  2. 2

    なぜC ++は、派生クラスが初期化リストで基本クラスのメンバーを使用することを許可しないのですか?

  3. 3

    次のメンバー初期化子がC ++で機能しないのはなぜですか

  4. 4

    関数内のexternに明示的な初期化子を提供してもexternがオーバーライドされないのはなぜですか?

  5. 5

    UIViewサブクラスの場合、CGRect引数で初期化子をオーバーライドすると、引数が空の初期化子が自動的に提供されるのはなぜですか?

  6. 6

    基本クラスのメンバーが、コンストラクターで最初に初期化された値を保持しないのはなぜですか?

  7. 7

    クラスのメンバーが存在しないのはなぜですか?

  8. 8

    const std :: string&をコンストラクターに渡すと、初期化子リストのconst std :: string&メンバー変数にバインドできないのはなぜですか?

  9. 9

    正しい初期化を使用しない限り、__ dict__にクラスメンバーが含まれないのはなぜですか?

  10. 10

    クラスのメンバー関数でQThreadを初期化できないのはなぜですか?

  11. 11

    クラスのメンバー関数でQThreadを初期化できないのはなぜですか?

  12. 12

    swiftがCGRect初期化子とCGRectMake関数の両方を提供するのはなぜですか?

  13. 13

    C ++ 11クラス内初期化子が括弧を使用できないのはなぜですか?

  14. 14

    初期化子、コンストラクター、およびメソッド呼び出しを使用するときに、printステートメントがこの順序で実行されるのはなぜですか?

  15. 15

    初期化子リストから(暗黙のコンストラクターを介して)ベクトルを開始するときに、move構文が使用されないのはなぜですか

  16. 16

    std :: future <T>とstd :: shared_future <T>がメンバーswap()を提供しないのはなぜですか?

  17. 17

    派生クラス変数を初期化し、その基本クラスタイプに割り当てると、そのメンバーへのアクセスが許可されないのはなぜですか?

  18. 18

    メンバー初期化子リストを持つデフォルトのctorに= defaultを使用できないのはなぜですか

  19. 19

    クラスが宣言するプロトコルを実装している場合、クラスが失敗可能な初期化子を提供する必要がないのはなぜですか?

  20. 20

    エラー: LINQ to Entities では、パラメーターのないコンストラクターと初期化子のみがサポートされています

  21. 21

    デフォルトで、Swiftの構造体のメンバーごとの初期化子を公開するにはどうすればよいですか?

  22. 22

    ネストされたクラスのメンバー関数が完全な型を必要としないのはなぜですか?

  23. 23

    Swiftで初期化子をオーバーライドするのはなぜですか?

  24. 24

    Flaskがインタラクティブデバッガーを提供しないのはなぜですか?

  25. 25

    Flutter-初期化子でクラスメンバーを使用するのはどこが適切ですか?

  26. 26

    スーパークラスで宣言された静的メソッドがサブクラスで呼び出されたときに、サブクラスの静的初期化子が呼び出されないのはなぜですか?

  27. 27

    LINQ to Entitiesでは、パラメーターのないコンストラクターと初期化子のみがサポートされています。

  28. 28

    「配列初期化子は初期化子リストまたは文字列リテラルでなければならない」というメッセージが表示されるのはなぜですか?

  29. 29

    コンストラクターでメンバーの初期化を使用して、明示的なコンストラクターの引数を満たすことができるのはなぜですか?

ホットタグ

アーカイブ