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