Sobes.tech
Junior — Middle

É possível expandir uma classe ou estrutura existente adicionando uma nova propriedade através de extensões?

sobes.tech IA

Resposta da IA

No Swift, as extensões permitem adicionar novos métodos, propriedades calculadas, inicializadores, subscript e tipos aninhados a classes, estruturas ou enumerações existentes. No entanto, as extensões não podem adicionar propriedades armazenadas. Isto deve-se ao facto de que as extensões não alteram a estrutura interna do tipo, apenas adicionam funcionalidades.

Se precisar de adicionar uma nova propriedade, pode usar uma propriedade calculada, que devolve um valor calculado em tempo de execução, mas que não é armazenado na memória do objeto.

Exemplo de uma propriedade calculada numa extensão:

extension String {
    var reversedString: String {
        return String(self.reversed())
    }
}

let text = "Hello"
print(text.reversedString) // Output: "olleH"

Se precisar de armazenar um novo valor, pode usar objetos associados através do runtime do Objective-C, mas isto não é uma prática padrão e aplica-se apenas a classes que herdam de NSObject.