Почему мои значения свойств по умолчанию все еще отображаются как параметры в 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

}

Так как name а также unit параметры Calcium имеют значения по умолчанию, почему я должен предоставить их в init метод? Разве мне не нужно только предоставить значение для value?

Я пытаюсь понять протоколно-ориентированное программирование и буду очень признателен за небольшое руководство.

1 ответ

Решение
  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)
Другие вопросы по тегам