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.

questionAnswers(3)

yourAnswerToTheQuestion