respondsToSelector()
使用Objective-C运行时,仅适用于与Objective-C兼容的方法.Swift enums
只能在Objective-C中表示,如果它们被标记@objc
,并且要求它们具有整数原始值.
所以
@objc enum TestEnum : Int { case A case B case C }
你respondsToSelector(Selector("testEnum:")
会回来的true
.
但请注意,对方法的存在进行测试仅对可选的协议方法有意义,并且这些方法仅适用于@objc
协议,例如:
@objc enum TestEnum : Int { case A case B case C } @objc protocol TestAProtocol: NSObjectProtocol { optional func testEnum(testEnum: TestEnum) func testInt(testInt: Int) }
然后使用可选链接更简单,而不是
respondsToSelector
:
func executeDelegateCallBack() { delegate?.testEnum?(.A) // ... }
或更详细:
func executeDelegateCallBack() { if let testEnum = delegate?.testEnum { testEnum(.A) } else { print("delegate is `nil` or does not respond to `testEnum`") } // ... }