如何在Swift中将类型'Struct <type>'的值转换为指定的类型'Struct <any>'

时间:2019-03-05 16:43:10

标签: swift generics type-conversion implicit-conversion

给出以下代码:

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.valuebar是错误的类型。

考虑到更复杂的情况,必须明确指定类型,因此此解决方案不起作用。谁能帮助解释为什么会这样并提供解决方案?

0 个答案:

没有答案