为什么我的默认属性值仍显示为Init()中的参数?

时间:2016-08-24 02:08:37

标签: swift protocols protocol-oriented

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

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的价值吗?

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

enter image description here

1 个答案:

答案 0 :(得分:5)

  1. 这与协议无关。

  2. 您不必为value以外的任何内容提供初始值设定项。但是您还没有提供任何初始化程序。因此,您拥有的唯一初始化程序是自动,而初始化程序是成员初始化程序,它需要所有属性的参数。

  3. 如果您不喜欢,请自行编写初始化程序:

    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)