我有一个描述需要测试的海水参数的协议:
protocol Parameter {
var name: String { get }
var unit: Unit { get }
var value: Double { get }
}
我有一个符合Calcium
的结构Parameter
:
struct Calcium: Parameter {
var name: String = "Calcium"
var unit: Unit = UnitDispersion.partsPerMillion
var value: Double
}
由于name
的{{1}}和unit
参数都有默认值,为什么我需要在Calcium
方法中提供它们?我不应该只需要提供init
的价值吗?
我正在尝试理解面向协议的编程,并且非常感谢这里的一些指导。
答案 0 :(得分:5)
这与协议无关。
您不必为value
以外的任何内容提供初始值设定项。但是您还没有提供任何初始化程序。因此,您拥有的唯一初始化程序是自动,而初始化程序是成员初始化程序,它需要所有属性的参数。
如果您不喜欢,请自行编写初始化程序:
struct Calcium: Parameter {
var name: String = "Calcium"
var unit: Unit = UnitDispersion.partsPerMillion
var value: Double
init(value:Double) {self.value = value}
}
现在说:
是合法的let c = Calcium(value:2)