我正在尝试创建 Array
的子类(好的,Array
是 struct
,所以我不能那样做,但是忍耐一下)。 Array
将包含有限数量的元素(就像所有数组一样),但不可能返回 out of range
错误,因为将应用模运算用于访问数组的任何索引。
let loopArray: LoopArray<Int> = [1, 2, 3, 4, 5]
print("Element at position 5 = \(loopArray[5])"
如果这是一个普通数组,它会因超出范围的异常而崩溃。但是因为它是一个循环数组,所以这里的输出将是
Element as position 5 = 1
我希望数组表现正常。如果执行 map
或 filter
等操作,它只会按预期对实际 元素执行。
最佳答案
这是一个执行此操作的扩展程序:
extension Array {
subscript(loopingIndex loopingIndex: Int) -> Element {
get { return self[loopingIndex % self.count] }
set { self[loopingIndex % self.count] = newValue }
}
}
示例用法:
let loopArray = [1, 2, 3]
loopArray[loopingIndex: 5]
因为 Array
是一个结构,所以创建一个与 Array
完全相同但只有 下标
的全新类型的唯一方法> 不同的实现方式是复制Array
中除下标
以外的所有代码。因此,我建议你写一个扩展。但是,扩展的问题在于您必须使用带有参数标签的下标,因为没有参数标签的下标已经存在于 Array
中。
关于arrays - 如何创建一个无限循环固定数量元素的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46121877/