我有一个定义结构的 Swift 框架:
public struct CollectionTO { var index: Order var title: String var description: String }
但是,我似乎无法使用另一个导入库的项目中的隐式成员初始化程序。错误是:
‘CollectionTO’ 无法初始化,因为它没有可访问的初始化程序
即默认的合成成员初始化器不是public。
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?
public init
引用手册:
“结构类型的默认成员初始化器如果结构类型的任何存储属性是私有的,则结构类型的默认成员初始化器被认为是私有的。否则,初始化器具有内部访问级别。 与上面的默认初始化程序一样,如果您希望在另一个模块中使用公共结构类型时可以使用成员初始化程序进行初始化,您必须自己提供一个公共成员初始化程序作为类型定义的一部分。”
“结构类型的默认成员初始化器如果结构类型的任何存储属性是私有的,则结构类型的默认成员初始化器被认为是私有的。否则,初始化器具有内部访问级别。
与上面的默认初始化程序一样,如果您希望在另一个模块中使用公共结构类型时可以使用成员初始化程序进行初始化,您必须自己提供一个公共成员初始化程序作为类型定义的一部分。”
摘自“The Swift Programming Language”,“Access Control”部分。