From 2e9940b664469959e76a8c62229c6e281249abcb Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Mon, 30 Jan 2023 13:27:12 +0800 Subject: [PATCH] SwiftExtension // Introducing Index Revolver. --- .../SwiftExtension/SwiftExtension.swift | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) 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..