Algumas vezes é difícil definir bons nomes para variáveis enquanto estamos codificando, e no Swift, com seus ótimos recursos, isso é especialmente verdadeiro.
Ao escrever encerramentos dentro das classes, é uma boa prática manter a atenção quando você precisa acessar self
. Se você não cuidar e usar [self fraco] ou [self sem dono], você pode criar uma referência circular para sua classe e mantê-la na memória, mesmo quando não precisar mais dela.
Quando usamos [self fraco] em um fechamento, precisamos olhar self
para garantir que não seja nulo. Se não fizermos isso, poderemos interromper nossa aplicação.
Para manter garantia de que self
está a apontar para uma instância válida podemos usar guard
como esta: guard let _self = self else...
. Quando usamos guard
instrução nesta situação, precisamos redefinir o nome do self e sabemos como é difícil criar grandes nomes de variáveis.
Recentemente, descobri um código de açúcar Swift que me permite usar palavras reservadas de linguagem como nomes de variáveis. Esta não é exatamente uma boa prática, mas pensei se seria possível usar este código de açúcar para continuar usando o self
nome para referências fracas dentro de meus encerramentos!
Para fazer isso, só precisamos usar sotaque grave para abraçar nossa self
redefinição de nome em guard
declaração. Exemplo:
class test {
let asyncValidator = validator()
var model: people
func save() {
// Do Save logic
}
func validate() {
asyncValidator.validate(entity: people) { [weak self] (result: Bool) in
guard let `self` = self else { return }
if result {
self.save()
}
}
}
}