Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

O que significa @objc ?

Alguns métodos tem na assinatura o @objc. O que significa?

3 respostas

Boa noite, Rodrigo! Como vai?

É para tornar o método visível para o Objective C e para o Objective-C runtime.

Para saber mais: https://stackoverflow.com/questions/30795117/when-to-use-objc-in-swift-code

Grande abraço e bons estudos!

solução

Por padrão, o Swift gera código que está disponível apenas para outro código Swift, mas se você precisar interagir com o tempo de execução do Objective-C - todo o UIKit, por exemplo - você precisa dizer ao Swift o que fazer.

É aí que entra o atributo @objc: quando você o aplica a uma classe ou método, ele instrui o Swift a disponibilizar essas coisas para o Objective-C, bem como para o código Swift. Assim, sempre que você quiser chamar um método a partir de um UIBarButtonItem ou Timer, você precisará marcar esse método usando @objc para que ele seja entendido pelo Objective-C.

Não se preocupe: se você se esquecer de adicionar @objc quando for necessário, seu código simplesmente não será compilado. Não é algo que você pode esquecer por acidente e apresentar um bug.

Para expor um método para Objective-C, basta escrever @objc antes de seu nome assim:

class MyController: UIViewController {
    @objc func authenticateUser () {

    }
}

Toda essa classe é automaticamente amigável ao Objective-C porque ela herda do UIViewController, mas se você precisar dela, você também pode explicitamente abrir uma classe para o Objective-C marcando-a como @objc.

Este recurso está disponível a partir do iOS 8.0

Perfeito. Obrigado pessoal!