我不明白为什么这总是失败。有什么帮助吗?显然,我不明白NSStringFromSelector是如何工作的?这是我的代码如下:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let selector = NSSelectorFromString("test(value:value2:)")
if self.responds(to: selector) {
print("it works")
} else {
print("it failed")
}
}
func test(value: Int, value2: Int) {
}
}
Run Code Online (Sandbox Code Playgroud)
您的选择器字符串的格式错误。的 Selector 字符串NSSelectorFromString必须看起来像 Objective-C 签名。
尝试:
let selector = NSSelectorFromString("testWithValue:value2:")
Run Code Online (Sandbox Code Playgroud)
并且您func必须标有@objc 或您class必须标有@objcMembers。
如何获取选择器字符串:
注意:在 Swift 中创建 Selector 的首选方法是使用#selector@DavidBerry 在他的回答中所描述的,因为它为您提供了 Selector 的编译时检查。
如果您仍然需要,NSSelectorFromString那么这是找出字符串的方法:
添加@objc到您的函数并编译项目后,单击窗口左上角的 Xcode 中的相关项图标,ViewController.swift然后选择Generated Interface -><ProjectName>-Swift.h。在那里你会找到你func的 Objective-C 接口:
- (void)testWithValue:(NSInteger)value value2:(NSInteger)value2;
Run Code Online (Sandbox Code Playgroud)
然后连接以冒号结尾的部分以创建选择器字符串: "testWithValue:value2:"
| 归档时间: |
|
| 查看次数: |
2549 次 |
| 最近记录: |