Почему мои значения свойств по умолчанию все еще отображаются как параметры в 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 ответ
Это не имеет ничего общего с протоколами.
Вы не должны предоставлять инициализатор для чего-либо, кроме
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)