Swift2、协议扩展&respondsToSelector

Swift 2, protocol extensions & respondsToSelector

我不确定,在我看来这是 Swift 2.0 中协议扩展的某种错误或错误实现。

我有 protocolA、protocolB 扩展 protocolA 并在 protocolB 扩展中实现方法。

我已经使 class 实例符合协议 B,但是当 respondsToSelector 检查 protocolA/B 方法时,结果是错误的。

import Cocoa
import XCPlayground

protocol ProtocolA : NSObjectProtocol {
  func functionA()
}

protocol ProtocolB : ProtocolA {
  func functionB()
}

extension ProtocolB {
   func functionA() {
     print("Passed functionA")
   }

   func functionB() {
     print("Passed functionB")
   }
}

class TestClass : NSObject, ProtocolB {

    override init () {

    }
}

var instance:TestClass = TestClass()
instance.functionA() // Calls code OK..

if instance.respondsToSelector("functionA") {
    print("Responds to functionA") // **False, never passing here**
}

if instance.respondsToSelector("functionB") {
    print("Responds to functionB") // **False, never passing here**
}

应该报告为错误?

有意思。对我来说看起来像个错误。它确实可以识别 class 上的函数,但不能识别扩展名上的函数。不管 Instance 是什么类型。此外,没有扩展代码将无法编译,因为协议方法是非可选的。所以真的很像bug/feature? in 响应选择器的实现。