Por que a tag @objc é necessária para usar um seletor?
Estou tentando usar um seletor para ver se um determinado protocolo pode executar uma ação. Quando eu tento assim:
protocol Test {
func hello()
func goodBye(a: String)
}
class Tester: NSObject, Test {
override init() {}
func hello() { }
func goodBye(a: String) { }
}
let a: Test = Tester()
let result = a.responds(to: Selector("goodByeWithA:"))
Nesse caso,result
avalia parafalse
.
Mas se eu adicionar o@objc
ao protocolo, ele avalia comotrue
.
@objc protocol Test {
func hello()
func goodBye(a: String)
}
Por que é isso
Em uma nota lateral, eu sei que agora é recomendável usar o#selector
intaxe e para me afastar do uso de strings, mas por várias razões, eu tenho que usar uma string nesse cas
EDIT: Isso só começou a acontecer depois que eu migrei meu projeto para o Swift 4.2