NSObject'响应'方法似乎在最新版本的Xcode 9 Beta 4,Swift版本4.0上被打破。Xcode 9响应选择器问题
下面是在Xcode 8上测试的一个示例代码(工作正常),在Xcode 9上,方法'responds'在所有情况下都返回false。
任何帮助,将不胜感激。
public class Worker : NSObject
{
public func work() { }
public func eat(_ food: AnyObject) { }
public func sleep(_ hours: Int,_ minutes: Int) { }
}
let worker = Worker()
let canWork = worker.responds(to: Selector(("work"))) // true
let canEat = worker.responds(to: Selector(("eat:"))) // true
let canSleep = worker.responds(to: Selector(("sleep:minutes:"))) // true
let canQuit = worker.responds(to: Selector(("quit"))) // false
示例源:https://stackoverflow.com/a/24168825
相关:https://stackoverflow.com/questions/44390378/how-can-i-deal-with-objc-inference-deprecation-with-selector-in-swift-4 –
Xcode 9应该建议现代的' #selector(Worker.work)'语法。一旦你使用它,编译器会警告:*“#selector'的参数指的是'Worker'中的实例方法'work()',取决于Swift 4中弃用的'@objc'推断”* –
@MartinR,I将会建议OP使用'#selector'语法,但是然后'#selector(quit)'甚至不会编译,这会否定执行运行时检查的能力。 – vacawama