【发布时间】:2016-03-08 04:19:27
【问题描述】:
我有一个名为Foo 的协议和一个名为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())
}
}
}
尝试追加到数组会导致以下错误:
无法使用 (Bar) 类型的参数列表调用“附加”
为什么没有按预期工作?
顺便说一句,用例是这样的:
let bazBarStack = Baz<Bar>().array
let bazQuxStack = Baz<Qux>().array
【问题讨论】:
-
可能类似于
array.append(Bar() as T)? -
是的,投射到 T 修复了它。不知何故,这个解决方案完全暗示了我哈哈。谢谢!