为什么我的默认 属性 值仍显示为 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

}

既然Calciumnameunit参数都有默认值,为什么还要在init方法中提供呢?我不应该只需要为 value 提供一个值吗?

我正在尝试理解面向协议的编程,非常感谢这里的一些指导。

  1. 这与协议无关。

  2. 除了 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)