1

我有一个描述需要测试的海水参数的协议:

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

}

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

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

在此处输入图像描述

4

1 回答 1

5
  1. 这与协议无关。

  2. 您不必为除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)
于 2016-08-24T02:25:52.093 回答