【发布时间】:2019-01-24 15:18:27
【问题描述】:
这就是我的类BaseSection 实现Collection 的方式,它看起来像这样:
class BaseSection<T:Equatable> {
var items:[T]?
required init(items:[T]){
self.items = items
}
}
let sectionTop = BaseSection<TopItem>(items:["foo","bar","yo"])
let sectionBottom = BaseSection<BottomItem>(items:["foo","bar","yo"])
对于这个演示,我正在构造字符串对象部分,它们是Equatable,但我的项目构造对象的一个属性是String
此处未列出集合实现。
我需要将两个对象都保存在数组中,即使它们的基类相同,也不能这样做。
let sections = [sectionTop, sectionBottom]
heterogeneous collection literal could only be inferred to '[Any]' add explicit type annotation....
我与许多解决方案斗争了几个小时,但在这里无法实现我的目标。 任何帮助将不胜感激
Edit: I have uploaded the sample code to gitHub so you can get a better grasp of what im doing
【问题讨论】:
-
如果你有
sections,你打算用它做什么?您将无法访问其元素的items属性,因为类型不一致。 (包含as?的解决方案将所有内容都转换为错误,应该重新考虑。)了解您期望使用sections做什么(特别是您打算如何处理它的元素),我们可以讨论它的类型应该是。 -
@user28434 有趣的文章 :)
-
我同意 Rob 的观点,不清楚你想用数组做什么
-
这不是我真正要问的。我的意思是从字面上看,您认为自己编写了哪一行代码来消耗
sections?您将无法访问items(至少不能像TopItem和BottomItem),那么您将如何处理它呢?您的调用代码将决定您如何构建它。 (这是怎么回事,你几乎可以肯定这里确实想要一个协议,但我必须知道你希望该协议做什么。)
标签: swift generics collections