반응형
enum값을 메뉴의 flow에 따라 배치하거나 enum에 parameter를 주고 다른 용도로 활용할 경우 다음 값, 이전 값을 가져올 필요가 있을 때가 발생한다. 그 경우 활용할 수 있는 코드를 공개한다. 확장함수로 Enum.함수명 으로 사용하면 된다. 현재 값이 enum의 마지막인데 next()를 콜 할경우 첫번째 값으로 순회하여 리턴한다. 마찬가지로 첫번째 값인데 previous()를 호출할 경우 마지막 값으로 순회하여 리턴한다.
inline fun <reified T: Enum<T>> T.next(): T {
val values = enumValues<T>()
val nextOrdinal = (ordinal + 1) % values.size
return values[nextOrdinal]
}
inline fun <reified T: Enum<T>> T.previous(): T {
val values = enumValues<T>()
var nextOrdinal = (ordinal - 1) % values.size
if(nextOrdinal < 0) {
nextOrdinal = values.size - 1
}
return values[nextOrdinal]
}
// example
enum AL {
A, B, C
}
fun test() {
val a = AL.A
println(a)
println(a.next())
println(a.previous())
}
/*
결과
A
B
C
*/
반응형
댓글