Swift - Extensiones de protocolo - Valores predeterminados de propiedad
Digamos que tengo el siguiente protocolo:
protocol Identifiable {
var id: Int {get}
var name: String {get}
}
Y que tengo las siguientes estructuras:
struct A: Identifiable {
var id: Int
var name: String
}
struct B: Identifiable {
var id: Int
var name: String
}
Como puede ver, tuve que 'conformarme' con el protocolo identificable en la estructura A y la estructura B. Pero imagine que si tuviera N más estructuras que necesiten cumplir con este protocolo ... no quiero 'copiar / pegar 'la conformidad (id de var: Int, nombre de var: String)
Entonces creo unextensión de protocolo:
extension Identifiable {
var id: Int {
return 0
}
var name: String {
return "default"
}
}
Con esta extensión ahora puedo crear una estructura que se ajuste al protocolo identificable sin tener que implementar ambas propiedades:
struct C: Identifiable {
}
Ahora el problema es que no puedo establecer un valor para la propiedad id o la propiedad name:
var c: C = C()
c.id = 12 // Cannot assign to property: 'id' is a get-only property
Esto sucede porque en el protocolo identificable, la identificación y el nombre solo se pueden obtener. Ahora si cambio las propiedades de identificación y nombre a{prepárate} Obtuve el siguiente error:
El tipo 'C' no se ajusta al protocolo 'Identificable'
Este error ocurre porque no he implementado un configurador en la extensión del protocolo ... Entonces, cambio la extensión del protocolo:
extension Identifiable {
var id: Int {
get {
return 0
}
set {
}
}
var name: String {
get {
return "default"
}
set {
}
}
}
Ahora el error desaparece, pero si configuro un nuevo valor para id o name, obtiene el valor predeterminado (getter). Por supuesto,la incubadora está vacía.
Mi pregunta es:¿Qué código debo poner dentro del setter? Porque si agregoself.id = newValue se bloquea (recursivo).
Gracias por adelantado.