代码之家  ›  专栏  ›  技术社区  ›  David Pilkington

为什么需要@objc标记来使用选择器?

  •  0
  • David Pilkington  · 技术社区  · 6 年前

    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:"))
    

    在这种情况下, result 计算结果为 false

    但如果我加上 @objc 标记,它的计算结果为 true

    @objc protocol Test {
        func hello()
        func goodBye(a: String)
    }
    

    为什么会这样?

    另一方面,我知道现在建议使用 #selector

    编辑:这只发生在我将我的项目迁移到swift4.2之后

    1 回复  |  直到 6 年前
        1
  •  1
  •   JeeVan TiWari    6 年前

    别担心:如果你忘了在需要的时候添加@objc,你的代码就不会编译它,而不是你会意外地忘记它,并引入一个bug。