最新版のXcode 9 Beta 4、Swiftバージョン4.0ではNSObjectの 'responds'メソッドが壊れているようです。Xcode 9 RespondsToSelector Issue
以下は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) '構文を使用します。 Swift 4で廃止された '@objc'推論に依存する 'Worker'のインスタンスメソッド 'work()'を参照しています。* –
@MartinR、I OPは '#selector'構文を使うことを示唆していましたが、' #selector(quit) 'はコンパイルされず、ランタイムチェックを行う能力を否定します。 – vacawama