了解结构初始化程序是否包含私有属性

时间:2019-03-06 12:08:09

标签: swift struct

我想了解如果结构包含私有属性,则初始化程序如何工作。我有以下代码:

struct Doctor {
    var name: String
    var location: String
    private var currentPatient = "No one"
}
let drJones = Doctor(name: "Esther Jones", location: "Bristol")

这将引发错误:

  

无法使用参数列表为'Doctor'类型调用初始化程序   输入'((名称:字符串,位置:字符串)'

我的假设是: 默认的Memeberwise初始化程序包含无法从外部调用的私有属性。

但是我对以下代码感到困惑:

struct Doctor {
    private var currentPatient = "No one"
}
let drJones = Doctor()

这是如何工作的?它不会引发任何错误。

1 个答案:

答案 0 :(得分:3)

您不能使用默认的成员初始化程序来为struct访问级别修饰符分配private的属性。

您的第二个示例可行,因为您为属性设置了默认值,因此在初始化时无需分配它。

如果需要使用初始化程序分配私有属性,则必须编写自己的

init(name: String, location: String, currentPatient: String) {
    self.name = name
    self.location = location
    self.currentPatient = currentPatient
}