У меня есть протокол, который описывает морской параметр воды, который нуждается в испытываться:Почему значения свойств по умолчанию все еще отображаются как параметры в 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
?
Я пытаюсь понять протокол-ориентированное программирование и действительно оценил бы небольшое руководство здесь.
Что касается следующего очевидный вопрос «почему Безразлично» t Swift ... "см. https://github.com/apple/swift-evolution/blob/master/proposals/0018-flexible-memberwise-initialization.md, в котором обсуждаются оба предложения по изменению этого поведения и ссылки на обоснование того, почему это до сих пор не изменилось. –
@RobNapier Прохладный, спасибо, что добавил. Поэтому мы могли бы назвать это «интеллектуальным инициализатором по порядку» ... :) – matt
Итак, если у меня есть, скажем, еще 20 структурных параметров воды, которые соответствуют протоколу Parameter, мне все равно нужно реализовать один и тот же инициализатор для каждой структуры? Это что-то, что можно добавить в расширение протокола, или мне было бы лучше просто добавить этот инициализатор в протокол и потребовать, чтобы он был реализован всем, что соответствует протоколу Parameter? –