【发布时间】:2021-04-27 05:48:12
【问题描述】:
我有以下课程:
class MyClass<T: BaseClass> {
let aThing = T()
func someMethod() {
configure()
}
}
而
class SubTypeAOfBaseClass: BaseClass { ... }
class SubTypeBOfBaseClass: BaseClass { ... }
在configure 中,我想根据其类型配置aThing。因此我创建了一个协议Configurable 和一个扩展:
protocol Configurable {
func configure()
}
extension MyClass: Configurable where T == SubTypeAOfBaseClass {
func configure() {
print("Configuring SubTypeAOfBaseClass")
aThing.doSomethingA()
}
}
我得到的错误是在MyClass.someMethod 中我调用configure():“引用实例方法configure() 需要类型T 和SubTypeAOfBaseClass 是等价的。
添加以下扩展时的另一个错误:
extension MyClass: Configurable where T == SubTypeBOfBaseClass {
func configure() {
print("Configuring SubTypeBOfBaseClass")
aThing.doSomethingB()
}
}
错误更改为“调用实例方法配置中没有完全匹配”和行中
extension MyClass: Configurable where T == SubTypeBOfBaseClass {
我收到错误“MyClass 与可配置协议的一致性冲突,即使有不同的条件边界,也不能有多个一致性。”
它应该工作,但显然我遗漏了一些东西,或者我对如何实现我想要的东西的理解是错误的。
【问题讨论】:
-
抛开其他问题,如果
T既不是SubTypeAOfBaseClass也不是SubTypeBOfBaseClass怎么办?例如,如果T是BaseClass会怎样? -
好问题。我没有答案。