我感到困惑......我甚至不知道编译器认为可能会发生什么,但我90%肯定这应该是可能的:
class Generic<Type: Any> {
}
protocol Foo {
func bar(_ baz: Generic<Any>)
}
class SomeFoo: Foo {
func bar(_ baz: Generic<Any>) {
print("Got", baz)
}
}
let someFoo = SomeFoo()
let generic = Generic<String>()
someFoo.bar(generic) // Compile error: Cannot convert value of type 'Generic<String>' to expected argument type 'Generic<Any>'
这里发生了什么,以及解决方法是什么?当然必须有一些解决方法......
答案 0 :(得分:1)
这称为协方差,并且Swift中的用户类型不支持(我知道Arrays除外)。 BTW Objective-C泛型以某种方式支持协方差 在您的情况下,我可以从2个选项中进行选择:
Generic
类中实现此协议