Sobes.tech
Junior — Middle

Qual é o impacto do uso da anotação @objc dynamic no código?

sobes.tech IA

Resposta da IA

A anotação @objc dynamic em Swift desempenha duas funções principais:

  1. @objc — torna um método ou propriedade acessível ao runtime Objective-C. Isso é necessário se você deseja usar a dispatching dinâmica, interagir com a API Objective-C, como KVO (Observação de Valor-Chave), seletores ou código antigo.

  2. dynamic — força o compilador a usar a dispatching dinâmica através do runtime Objective-C, em vez de otimizações estáticas ou embutidas. Isso permite, por exemplo, interceptar chamadas de métodos, o que é necessário para KVO.

Juntos, @objc dynamic são geralmente usados para propriedades e métodos que devem suportar observação dinâmica de mudanças (KVO) ou serem acessíveis a partir do Objective-C.

Exemplo:

class Person: NSObject {
    @objc dynamic var name: String = ""
}

let person = Person()
var observation = person.observe(\.name, options: [.new]) { object, change in
    print("O nome mudou para \(change.newValue ?? "")")
}
person.name = "Ivan" // Dispara o observador

Sem @objc dynamic, o KVO não funcionará, pois o mecanismo é baseado no runtime Objective-C e na dispatching dinâmica.