Swift - Расширения протокола - Значения свойств по умолчанию
Допустим, у меня есть следующий протокол:
protocol Identifiable {
var id: Int {get}
var name: String {get}
}
И что у меня есть следующие структуры:
struct A: Identifiable {
var id: Int
var name: String
}
struct B: Identifiable {
var id: Int
var name: String
}
Как вы можете видеть, мне пришлось «соответствовать» протоколу Identifiable в структуре A и структуре B. Но представьте, если бы у меня было N структур, которые должны соответствовать этому протоколу ... я не хочу «копировать / вставлять» 'соответствие (var id: Int, var name: String)
Итак, я создаюрасширение протокола:
extension Identifiable {
var id: Int {
return 0
}
var name: String {
return "default"
}
}
С этим расширением теперь я могу создать структуру, соответствующую протоколу Identifiable, без необходимости реализации обоих свойств:
struct C: Identifiable {
}
Теперь проблема в том, что я не могу установить значение для свойства id или свойства name:
var c: C = C()
c.id = 12 // Cannot assign to property: 'id' is a get-only property
Это происходит потому, что в протоколе Identifiable идентификатор и имя доступны только для получения. Теперь, если я изменю свойства id и name на{приготовься} Я получаю следующую ошибку:
Тип «С» не соответствует протоколу «Идентифицируемый»
Эта ошибка возникает из-за того, что я не реализовал установщик в расширении протокола ... Поэтому я изменяю расширение протокола:
extension Identifiable {
var id: Int {
get {
return 0
}
set {
}
}
var name: String {
get {
return "default"
}
set {
}
}
}
Теперь ошибка исчезает, но если я установлю новое значение в id или name, он получит значение по умолчанию (getter). Конечно,сеттер пуст.
Мой вопрос:Какой кусок кода я должен поместить в сеттер? Потому что, если я добавлюself.id = newValue он падает (рекурсивно).
Заранее спасибо.