【问题标题】:NSSelectorFromString and Selector StructNSSelectorFromString 和 Selector 结构
【发布时间】:2018-07-15 09:19:33
【问题描述】:

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

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

我收到警告

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

当使用 NSSelectorFromString 时

 let aSelector = NSSelectorFromString("registerRemoteNotificationWithApplication:")

没有警告

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

  @objc func registerRemoteNotification(application:UIApplication) {


}

【问题讨论】:

  • 你有什么问题?您只是在写当前 Swift 的工作原理。你想问什么?
  • 编译器在使用 Swift Selector Struct 时给了我一个警告,但在使用 Objective-c 运行时 NSSelectorFromString 时却没有,所以它们之间是否有任何不同,我应该忽略警告还是只使用 NSSelectorFromString
  • 您最好将问题句子包含在问题帖子的文本中。

标签: swift objective-c-runtime swift4.1.5


【解决方案1】:

从 Swift 3 开始,您应该为此使用 #selector()。给定

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

你会使用

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

【讨论】:

    猜你喜欢
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 2012-08-01
    • 2011-09-30
    • 1970-01-01
    • 2011-09-23
    相关资源
    最近更新 更多