我不明白为什么这总是失败。有什么帮助吗?
显然,我不明白如何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) {
}
}
您的选择器字符串的格式错误。选择器字符串NSSelectorFromString
必须看起来像 Objective-C 签名。
Try:
let selector = NSSelectorFromString("testWithValue:value2:")
和你的func
必须标记为@objc
or your class
必须标记为@objcMembers
.
如何获取选择器字符串:
注意:在 Swift 中创建选择器的首选方法是使用#selector
正如@DavidBerry 在中所描述的他的回答 https://stackoverflow.com/a/52012903/1630618因为它为您提供了选择器的编译时检查。
如果你还需要NSSelectorFromString
那么这是找出字符串的方法:
添加后@objc
到您的函数并编译项目,单击相关项目Xcode 中左上角的图标ViewController.swift
窗口并选择生成的界面-><ProjectName>-Swift.h
。在那里你会发现你的func
的 Objective-C 接口:
- (void)testWithValue:(NSInteger)value value2:(NSInteger)value2;
然后连接以冒号结尾的部分以创建选择器字符串:"testWithValue:value2:"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)