给出以下代码:
struct Foo<T> {
let value: T
}
let bar: Foo<Any> = Foo<Bool>(value: true) // ERROR
我收到以下错误:
无法将“ Foo”类型的值转换为指定的“ Foo”类型
对此代码稍作调整:
struct Foo<T> {
let value: T
}
let bar = Foo<Any>(value: true)
print(bar as? Foo<Bool>) // WARNING
我收到此警告:
从“ Foo”投射到不相关的类型“ Foo”总是失败
为什么会出现此错误?考虑到Bool
的类型实际上可以转换为Any
,这两种类型似乎相互关联,如以下示例所示:
let bar: Any = Bool(true)
尽管可以通过删除指定的类型来解决此示例,
let bar = Foo<Bool>(value: true)
let bar: Foo<Any> = Foo(value: true)
这不会给我想要的结果,因为Foo.value
或bar
是错误的类型。
考虑到更复杂的情况,必须明确指定类型,因此此解决方案不起作用。谁能帮助解释为什么会这样并提供解决方案?