構造体を定義する 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 プログラミング言語」の「アクセス制御」セクションからの抜粋。