我有一个名为 Foo
的协议(protocol)和一个名为 Bar
的结构。 Bar
符合 Foo
。
protocol Foo {}
struct Bar: Foo {}
将 Bar
实例附加到 Bar
数组可以按预期工作。
var array = [Bar]()
array.append(Bar())
现在,我有一个名为 Baz
的通用结构,它使用符合 Foo
的类型(例如 Bar
)进行初始化。
struct Baz<T: Foo> {
private(set) var array = [T]()
init() {
if T.self is Bar.Type {
// Error: Cannot invoke 'append' with an argument list of type (Bar)
array.append(Bar())
}
}
}
尝试追加到数组会导致以下错误:
Cannot invoke 'append' with an argument list of type (Bar)
为什么这没有按预期工作?
顺便说一句,用例是这样的:
let bazBarStack = Baz<Bar>().array
let bazQuxStack = Baz<Qux>().array
最佳答案
您需要将对象存储在数组中,且类型为 T。因此,您应该使用 as 进行强制转换! T
:
struct Baz<T: Foo> {
private(set) var array = [T]()
init() {
if T.self is Bar.Type {
array.append(Bar() as! T)
}
}
}
关于arrays - 追加到 Swift 中的通用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35858872/