1. ホーム
  2. スイフト

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

2022-04-07 18:48:11

質問

Swiftのフレームワークで、構造体を定義しています。

public struct CollectionTO {
    var index: Order
    var title: String
    var description: String
}

しかし、ライブラリをインポートしている他のプロジェクトから暗黙のメンバーワイズイニシャライザを使用することができないようです。というエラーが出ます。

'CollectionTO'はアクセス可能なイニシャライザーがないため、初期化できません。

すなわち、デフォルトで合成されたメンバー単位の初期化子は public .

var collection1 = CollectionTO(index: 1, title: "New Releases", description: "All the new releases")

こんな感じで、自分でinitメソッドを追加する必要があるんです。

public struct CollectionTO {
    var index: Order
    var title: String
    var description: String

    public init(index: Order, title: String, description: String) {
        self.index = index;
        self.title = title;
        self.description = description;
    }
}

を明示的に定義することなく、これを実現する方法はないでしょうか。 public init ?

解決方法は?

マニュアルを引用する。

<ブロッククオート

構造体型のデフォルトのメンバ型初期化子 構造体型のデフォルトのメンバーワイズ・イニシャライザーは、構造体の保存されたプロパティのいずれかがプライベートである場合、プライベートとみなされます。そうでない場合、イニシャライザーのアクセスレベルは internal です。

上記のデフォルトイニシャライザーと同様に、パブリック構造体型を他のモジュールで使用する際にメンバーワイズイニシャライザーで初期化できるようにしたい場合は、その型の定義の一部としてパブリックメンバーワイズイニシャライザーを自分で提供しなければなりません."。

より抜粋 Swift プログラミング言語" セクション "アクセスコントロール" .