一尘不染

默认情况下,如何在Swift中将成员初始化器公开?

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")

我必须像这样添加自己的初始化方法:

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;
    }

}

…但是我宁愿不知道是否还有其他人知道的方法?


阅读 206

收藏
2020-07-07

共1个答案

一尘不染

引用手册:

“结构类型的默认成员明智的初始化程序如果结构的任何存储属性是私有的,则将结构类型的默认成员明智的初始化程序视为私有。否则,该初始化程序具有内部访问级别。

与上面的默认初始值设定项一样,如果要在一个公共结构类型在另一个模块中使用时使用成员方式初始值设定项来初始化,则必须自己提供一个公共成员方式初始值设定项作为类型定义的一部分。”

摘自“雨燕程序设计语言”,部分“访问控制”

2020-07-07