【发布时间】:2017-03-28 07:16:49
【问题描述】:
我只是好奇是否可以执行以下操作
protocol Data { }
class A: Data { }
class B: Data { }
class Generic<T> { }
class doStuff {
func prepareToDoStuff() {
self.doTheStuffWithGenerics([Generic<A>(), Generic<B>])
}
func doTheStuffWithGenerics<T: Generic<Data>>(_ generics: [T]) {
}
}
目前我的编译器告诉我不要说
"无法将 'Generic[A]' 类型的值转换为预期的元素类型 '通用[数据]'"
有什么想法吗?解决方案?
【问题讨论】:
-
相关(欺骗?):How do I store a value of type Class<ClassImplementingProtocol> in a Dictionary of type [String:Class<Protocol>] in Swift? & Swift generic coercion misunderstanding——泛型在 Swift 中是不变的。您可能需要一个类型橡皮擦。
-
@Hamish 我知道对泛型协议使用类型擦除,但是泛型类或结构有点丢失......你有任何资源或知道如何演示这个概念吗?
-
我不确定我是否理解你 - both 我链接到的问答都在谈论泛型类(他们想将
Generic<SomeClass>转换为Generic<SomeProtocol>,其中SomeClass符合SomeProtocol)。这是an example gist 应用于您的确切示例,使用我在my answer here 中展示的类型橡皮擦实现。
标签: arrays swift generics protocols