Swift - Extensões de protocolo - Valores padrão da propriedade
Digamos que eu tenho o seguinte protocolo:
protocol Identifiable {
var id: Int {get}
var name: String {get}
}
E que eu tenho as seguintes estruturas:
struct A: Identifiable {
var id: Int
var name: String
}
struct B: Identifiable {
var id: Int
var name: String
}
Como você pode ver, eu tive que 'estar em conformidade' com o protocolo identificável na estrutura A e na estrutura B. Mas imagine se eu tivesse N mais estruturas que precisam estar em conformidade com esse protocolo ... Eu não quero 'copiar / colar 'a conformidade (ID da var: Int, nome da var: String)
Então eu crio umextensão de protocolo:
extension Identifiable {
var id: Int {
return 0
}
var name: String {
return "default"
}
}
Com esta extensão, agora posso criar uma estrutura que esteja em conformidade com o protocolo Identificável sem precisar implementar as duas propriedades:
struct C: Identifiable {
}
Agora, o problema é que não consigo definir um valor para a propriedade id ou a propriedade name:
var c: C = C()
c.id = 12 // Cannot assign to property: 'id' is a get-only property
Isso acontece porque no protocolo identificável, id e nome são apenas obtidos. Agora, se eu alterar as propriedades id e name para{prepare-se} Estou tendo o erro a seguir:
O tipo 'C' não está em conformidade com o protocolo 'Identificável'
Este erro ocorre porque eu não implementei um setter na extensão do protocolo ... Então, altero a extensão do protocolo:
extension Identifiable {
var id: Int {
get {
return 0
}
set {
}
}
var name: String {
get {
return "default"
}
set {
}
}
}
Agora, o erro desaparece, mas se eu definir um novo valor como id ou nome, ele obterá o valor padrão (getter). Claro,o levantador está vazio.
Minha pergunta é:Que parte do código eu tenho que colocar dentro do levantador? Porque se eu adicionarself.id = newValue trava (recursiva).
Desde já, obrigado.