Swift の構造体のメンバー単位の初期化子をデフォルトで public にするにはどうすればよいでしょうか? 質問する

Swift の構造体のメンバー単位の初期化子をデフォルトで public にするにはどうすればよいでしょうか? 質問する

構造体を定義する 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?

ベストアンサー1

マニュアルからの引用:

「構造体の型のデフォルトのメンバーワイズ初期化子構造体の型のデフォルトのメンバーワイズ初期化子は、構造体の格納プロパティのいずれかがプライベートである場合はプライベートと見なされます。それ以外の場合、初期化子のアクセス レベルは内部になります。

上記のデフォルトの初期化子と同様に、パブリック構造体型を別のモジュールで使用するときにメンバー単位の初期化子で初期化できるようにするには、型の定義の一部としてパブリック メンバー単位の初期化子を自分で提供する必要があります。"

「Swift プログラミング言語」の「アクセス制御」セクションからの抜粋。

おすすめ記事