我遇到了一个问题,我有一些协议:
protocol Baz {
func bar<T>(input:T)
}
该函数bar
是通用的,因为我不希望协议本身具有Self
(它需要在集合中可用)。我有一个协议的实现定义为:
class Foo<S>: Baz {
var value:S
init(value:S) {
self.value = value
}
func bar<T>(input:T) {
value = input
}
}
这会产生错误,因为编译器不知道S
并且T
是同一类型。理想情况下,我应该能够编写如下内容:
func bar<T where T==S>(input:T) {
value = input
}
或者
func bar<T:S>(input:T) {
value = input
}
第一种形式给出了“相同类型的要求使通用参数'S'和'T'等效”错误(这正是我想要做的,所以不知道为什么它是一个错误)。第二种形式给了我一个“继承自非协议、非类类型'S'”。
关于如何使其工作或在 Swift 中更好的设计模式的任何想法?
更新:正如@luk2302 指出的,我忘了Foo
遵守Baz
协议