我很困惑......我什至不知道编译器认为可能会发生什么,但我 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>'
这是怎么回事,解决方法是什么?当然必须有一些解决方法......
最佳答案
这称为协方差,Swift 中的用户类型不支持它(据我所知,数组除外)。顺便说一句,Objective-C 泛型以某种方式支持协变。
在您的情况下,我会从 2 个选项中进行选择:
- 使条形图功能通用
- 创建将被 foo 函数接受的非通用协议(protocol),并在您的
Generic
类中实现该协议(protocol)
关于swift - 无法将类型 'Generic<String>' 的值转换为预期的参数类型 'Generic<Any>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41516327/