这是我的代码
class Foo<T> {
}
class Main {
static func test() {
var foo: Foo<Any>
var bar = Foo<String>()
//Do all my stuff with foo necessitating String
foo = bar
}
}
当我尝试分配 foo = bar
时我收到错误 Cannot assign a value of type Foo<String> to a value of type Foo<Any>
.
我不明白为什么会出现此错误,因为 String 符合 Any。
如果我做完全相同的事情但使用数组,我不会有任何错误
static func test() {
var foo: Array<Any>
var bar = Array<String>()
//Do all my stuff with foo necessitating String
foo = bar
}
有人知道我的代码有什么问题吗? 谢谢
最佳答案
数组和字典是具有这种内置行为的特殊类型。但是,这不适用于自定义泛型类型。类型Foo<Any>
不是 Foo<String>
的父类(super class)型(或本例中的父类(super class))尽管Any
是 String
的父类(super class)型.因此,您不能将这些类型的变量相互赋值。
根据您的具体情况,Swift Cast Generics Type 中概述的解决方案可能对你有用。当Foo
包装类型为 T
的值您可以添加一个通用构造函数来转换来自 Foo
的不同类型实例的值.
class Foo<T> {
var val: T
init(val: T) {
self.val = val
}
init<O>(other: Foo<O>) {
self.val = other.val as! T
}
}
class Main {
static func test() {
var foo: Foo<Any>
var bar = Foo<String>(val: "abc")
//Do all my stuff with foo necessitating String
foo = Foo<Any>(other: bar)
}
}
关于ios - Swift:将 Foo<String> 转换为 Foo<Any>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31923052/