【发布时间】:2015-06-25 20:40:05
【问题描述】:
我不确定,在我看来这是 Swift 2.0 中协议扩展的某种错误或错误实现。
我有protocolA,protocolB扩展protocolA和protocolB扩展中的实现方法。
我已经使一个类实例符合 protocolB,但是当通过 respondsToSelector 检查 protocolA/B 方法时,结果为 false。
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**
}
应该作为错误报告吗?
【问题讨论】:
-
你应该提交一个错误。
-
是的。您是否已经提交了错误? :)
-
是的,确实是一个错误。你碰巧提交了吗?
-
我已经提交了一个非常相似的错误bugs.swift.org/browse/SR-544
-
上面对 Nick 的错误报告的回复表明这是一个功能,而不是错误,并且不会被修复。
respondsToSelector不起作用,也不会使用协议扩展。