- O que é @objcinferência? O que está acontecendo?
Em Swift 3, o compilador deduz @objcem vários lugares para que você não precise. Em outras palavras, certifica-se de adicionar @objcpara você!
Em Swift 4, o compilador não faz mais isso (tanto). Agora você deve adicionar @objcexplicitamente.
Por padrão, se você tiver um projeto anterior ao Swift 4, receberá avisos sobre isso. Em um projeto Swift 4, você receberá erros de construção. Isso é controlado através da SWIFT_SWIFT3_OBJC_INFERENCEconfiguração de compilação. Em um projeto pré-Swift 4, isso é definido como On. Eu recomendaria definir isso como Default(ou Off), que agora é a opção padrão em um novo projeto.
Levará algum tempo para converter tudo, mas como é o padrão para o Swift 4, vale a pena fazê-lo.
- Como interrompo os avisos / erros do compilador?
Existem duas maneiras de converter seu código para que o compilador não se queixe.
Uma é usar @objcem cada função ou variável que precisa ser exposta ao tempo de execução do Objective-C:
@objc func foo() {
}
O outro é usar @objcMemberspor uma Classdeclaração. Isso garante adicionar automaticamente @objca TODAS as funções e variáveis da classe. Essa é a maneira mais fácil, mas tem um custo, por exemplo, pode aumentar o tamanho do seu aplicativo, expondo funções que não precisavam ser expostas.
@objcMembers class Test {
}
- O que é @objce por que é necessário?
Se você introduzir novos métodos ou variáveis em uma classe Swift, marcando-os como os @objcexpõe ao tempo de execução Objective-C. Isso é necessário quando você possui um código Objective-C que usa sua classe Swift ou, se você estiver usando recursos do tipo Objective-C, como Selectors. Por exemplo, o padrão de ação de destino:
button.addTarget(self, action:#selector(didPressButton), for:.touchUpInside)
- Por que eu não marcaria tudo @objc?
Existem negativos que vêm marcando algo como @objc:
- Aumento do tamanho binário do aplicativo
- Sem sobrecarga de função
Lembre-se de que este é um resumo de alto nível e mais complicado do que escrevi. Eu recomendaria ler a proposta real para obter mais informações.
Fontes: