swift - 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) {
}
解决方案
从 Swift 3 开始,你应该使用#selector()
它。给定
class Foo: NSObject {
@objc func registerRemoteNotification(application:UIApplication) { }
}
你会用
let selector = #selector(Foo.registerRemoteNotification(application:))
推荐阅读
- c# - 如何使用反射将类型对象转换为 C# 中的列表。我可以访问对象中的属性,但不能访问值,有什么建议吗?
- stenciljs - TestWindow 不是 Stenciljs 单元测试中的构造函数
- ios - 无法从 iOS 中的“MyFiles”附加和发布 pdf 文件
- highcharts - 使用轴类型“类别”时,与 x 轴相反的 Highcharts 人口金字塔未正确标记
- c# - C# - 使用 WMI 获取带有友好名称的 COM 端口
- ssl - 在 IIS 中部署应用程序
- ksqldb - 来自流主题(Json 格式)的新流,没有任何数据
- sql - 按不同值选择所有行,并限制不同值
- java - 基于int数组和负值的直方图
- python - 从字典中拉出多个数组并用 numpy 堆叠它们的 Pythonic 方法