为什么我的默认 属性 值仍显示为 Init() 中的参数?
Why Are My Default Property Values Still Showing as Parameters in Init()?
我有一个描述需要测试的海水参数的协议:
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
}
既然Calcium
的name
和unit
参数都有默认值,为什么还要在init
方法中提供呢?我不应该只需要为 value
提供一个值吗?
我正在尝试理解面向协议的编程,非常感谢这里的一些指导。
这与协议无关。
除了 value
,您不必为任何东西提供初始值设定项。但是您没有提供 any 初始值设定项。因此,您拥有的唯一初始化器是自动提供的初始化器,而该初始化器是成员初始化器,它需要所有属性的参数。
如果您不喜欢那样,请自己编写一个初始化程序:
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)
我有一个描述需要测试的海水参数的协议:
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
}
既然Calcium
的name
和unit
参数都有默认值,为什么还要在init
方法中提供呢?我不应该只需要为 value
提供一个值吗?
我正在尝试理解面向协议的编程,非常感谢这里的一些指导。
这与协议无关。
除了
value
,您不必为任何东西提供初始值设定项。但是您没有提供 any 初始值设定项。因此,您拥有的唯一初始化器是自动提供的初始化器,而该初始化器是成员初始化器,它需要所有属性的参数。
如果您不喜欢那样,请自己编写一个初始化程序:
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)