首页 > 解决方案 > NSSelectorFromString 和 Selector 结构

问题描述

如果我使用 Selector 创建选择器,我有一个问题 NSSelectorFromString 和 Selector 有什么不同

 let bSelector = Selector("registerRemoteNotificationWithApplication:")
 let cSelector = Selector(stringLiteral: "registerRemoteNotificationWithApplication:")

我收到警告

字符串文字不是有效的 Objective-C 选择器

当使用 NSSelectorFromString

 let aSelector = NSSelectorFromString("registerRemoteNotificationWithApplication:")

没有警告

即使函数是用/不带@objc 声明的

  @objc func registerRemoteNotification(application:UIApplication) {


}

标签: swiftobjective-c-runtimeswift4.1.5

解决方案


从 Swift 3 开始,你应该使用#selector()它。给定

class Foo: NSObject {
    @objc func registerRemoteNotification(application:UIApplication) { }
}

你会用

let selector = #selector(Foo.registerRemoteNotification(application:))

推荐阅读