我想在Swift中创建一个FIFO数组。我希望创建的东西能够像这样工作:
var Arr = FixedFIFOArray<Int>(maxSize:3)
Arr.append(1) //Arr = [1]
Arr.append(2) //Arr = [1,2]
Arr.append(3) //Arr = [1,2,3]
Arr.append(4) //Arr = [2,3,4] <- the max size is fixed to 3, so any
additional values added remove old values
除了这种行为外,它应该像一个数组一样运作:允许切片、索引、在for
循环中迭代等。
在任何其他语言中,这都是子类化的工作。我们没有改变太多,只是添加了一个初始化程序并修改了一两个函数。然而,在Swift中,我们无法对array
进行子类化。那么最好的方法是什么?我需要实现array
实现的每个协议,然后将相关函数传递给一个数组吗?类似于这样:
struct FixedFIFOArray<T> {
var _maxSize: Int
var _array: [T] = []
init(maxSize: Int) {
self._maxSize = maxSize
}
}
extension FixedFIFOArray : Collection {
//...
}
extension FixedFIFOArray : RandomAccessCollection {
//...
}
extension FixedFIFOArray : Sequence {
//...
}
// etc...
这似乎是做一件很简单的事情需要做很多工作。我错过了什么吗?