我想了解如果结构包含私有属性,则初始化程序如何工作。我有以下代码:
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()
这是如何工作的?它不会引发任何错误。
答案 0 :(得分:3)
您不能使用默认的成员初始化程序来为struct
访问级别修饰符分配private
的属性。
您的第二个示例可行,因为您为属性设置了默认值,因此在初始化时无需分配它。
如果需要使用初始化程序分配私有属性,则必须编写自己的
init(name: String, location: String, currentPatient: String) {
self.name = name
self.location = location
self.currentPatient = currentPatient
}