【发布时间】:2022-01-07 23:54:52
【问题描述】:
通常我有一个包含MemoryComponent 类的数组(所以[MemoryComponent])。我想将其重构为一个自定义数组类,它的元素类型为MemoryComponent,并包含程序可以使用的存储属性。
我尝试创建一个扩展,但它不允许存储属性:
extension Array where Element: MemoryComponent {
// ... no stored properties due to extension
}
我还尝试为数组创建另一个类:
class StorageArray: Array<MemoryComponent> {
// ... stored properties are possible
// but there's an error because of this:
// error: inheritance from non-protocol, non-class type 'Array<MemoryComponent>'
}
如何有效地从 [MemoryComponent] 创建继承以包含存储的属性?
【问题讨论】:
-
使用组合而不是继承,创建一个将数组作为(私有)属性的新类,然后添加其他属性和函数来访问/修改数组。如果你不需要对它进行那种控制,你也可以让数组公开。
-
@JoakimDanielson - 这是一种可能性,尽管在这种情况下(直接)不提供内置数组方法
-
如果您想包含自己的存储属性,我认为您没有那么多其他选择
-
是否有类似数组的协议来创建类?
-
是的,请查看 Array 的文档,看看它符合什么。
标签: arrays swift inheritance