diff --git a/Packages/vChewing_SwiftExtension/Sources/SwiftExtension/SwiftExtension.swift b/Packages/vChewing_SwiftExtension/Sources/SwiftExtension/SwiftExtension.swift index 53059fdb..d40005ef 100644 --- a/Packages/vChewing_SwiftExtension/Sources/SwiftExtension/SwiftExtension.swift +++ b/Packages/vChewing_SwiftExtension/Sources/SwiftExtension/SwiftExtension.swift @@ -218,3 +218,30 @@ extension FileHandle { readDataToEndOfFile() } } + +// MARK: - Index Revolver (only for Array) + +// Further discussion: https://forums.swift.org/t/62847 + +extension Array { + public func revolvedIndex(_ id: Int, clockwise: Bool = true, steps: Int = 1) -> Int { + if id < 0 || steps < 1 { return id } + var result = id + func revolvedIndexByOneStep(_ id: Int, clockwise: Bool = true) -> Int { + let newID = clockwise ? id + 1 : id - 1 + if (0..