我在Swift protocol extension method dispatch with superclass and subclass中描述了类似但略有不同的问题。
问题与协议上的静态方法有关。
我有以下代码:
protocol Protocol: class {
static var reuseID: String { get }
}
extension Protocol {
static var reuseID: String { return String(Self) }
}
class MyClass {
func registerClass<T where T: Protocol>(cell: T.Type) {
print(cell) // <-- Prints "SubClass"
print(cell.self) // <-- Prints "SubClass"
print(cell.reuseID) // <-- Prints "SuperClass", expected "SubClass"
}
}
class SuperClass: Protocol {}
class SubClass: SuperClass {}
print(SubClass.self) // <-- Prints "SubClass"
print(SubClass.reuseID) // <-- Prints "SubClass"
MyClass().registerClass(SubClass.self)
行为是&#34;已修复&#34;如果我从协议协议中删除了reuseID声明。这不是落后的吗?根据{{3}},协议扩展的调度规则如下:
我观察到的行为恰恰相反。知道我做错了吗?
答案 0 :(得分:0)
如何改变这一点:
extension Protocol {
static var reuseID: String { return String(self) }
}