Estou tentando converter o código-fonte do meu projeto de Swift 3 para Swift 4. Um aviso que o Xcode está me dando é sobre meus seletores.
Por exemplo, adiciono um destino a um botão usando um seletor regular como este:
button.addTarget(self, action: #selector(self.myAction), for: .touchUpInside)
Este é o aviso que mostra:
O argumento '#selector' refere-se ao método de instância 'myAction ()' em 'ViewController' que depende da inferência de atributo '@objc' descontinuada no Swift 4
Adicione '@objc' para expor esse método de instância ao Objective-C
Agora, bater Fix
na mensagem de erro faz isso com a minha função:
// before
func myAction() { /* ... */ }
// after
@objc func myAction() { /* ... */ }
Eu realmente não quero renomear todas as minhas funções para incluir a @objc
marca e estou assumindo que isso não é necessário.
Como reescrevo o seletor para lidar com a depreciação?
Pergunta relacionada:
@objc
? Isso é um pouco chato, mas geralmente faço essas funções privadas, exigindo que eu a marque de @objc
qualquer maneira.
@objcMembers
para expor todos os membros compatíveis com Obj-C ao Obj-C, mas eu não recomendaria isso, a menos que você realmente precise que toda a sua classe seja exposta.
@objc
é agora necessária, de modo a expô-los a Obj-C, e, portanto, usar-se com selectores.