我不确定,在我看来,这是某种错误或在SWIFT2.0中使用协议扩展的糟糕实现。
我有protocolA、protocolB扩展protocolA和protocolB扩展中的实现方法。
我已经确认了一个类实例符合protocolB,但是当respondsToSelector检查协议A/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**
}应该被报告为窃听器吗?
发布于 2015-06-25 20:58:13
有意思的。在我看来是个虫子。它确实识别类上的函数,但不识别扩展上的函数。无论实例具有何种类型。此外,如果没有扩展代码,就无法编译,因为协议方法是不可选的。所以看起来真的像个bug/特性吗?在响应选择器实现。
https://stackoverflow.com/questions/31060365
复制相似问题