ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift - CaseIterable
    developing study 2024. 1. 12. 21:08

    코테 문제풀이중에 enum을 배열처럼 순회하고 싶어서 알아보다가 알게 된 개념을 정리한다.

     

    1. 개념

    애플 문서에 나온대로 CaseIterable은 프로토콜이다. 이 프로토콜을 따르는 타입은 보통 관련 없는 value들의 열거형이다.

    CaseIterable타입을 채택하면 'allCases'프로퍼티를 이용해 모든 컬렉션의 경우에 접근이 가능하다고 나와있다.

    예로 보면 언제 사용할지 더 이해가 쉽다.

    만약에 아래처럼 enum으로 방향에 관한 케이스들이 있다고 치면,

    이 모든 케이스들을 for문처럼 순회해서 각 케이스들에 접근하고 싶다면 CaseIterable 프로토콜을 따르도록 해주면 되는 것.

    enum CompassDirection: CaseIterable {
        case north, south, east, west
    }

     

    이를 활용해서

    //1.
    print("There are \(CompassDirection.allCases.count) directions.")
    // Prints "There are 4 directions."
    
    //2.
    let caseList = CompassDirection.allCases
                                   .map({ "\($0)" })
                                   .joined(separator: ", ")
    // caseList == "north, south, east, west"

    1번처럼 모든 케이스들의 count를 가져올 수 있고, 또는

    2번처럼 map을 사용할 수도 있다.

     

    나의 경우에는 아래의 enum을 forEach로 순회할 때 사용했다.

     enum OriginNumber: String, CaseIterable {
            case zero = "zero"
            case one = "one"
            case two
            case three
            case four
            case five
            case six
            case seven
            case eight
            case nine
            case ten
        }

     

    allCases에서 forEach를 사용할 수 있는데 이때 number는 한개의 case로 접근이 가능해진다.

        OriginNumber.allCases.forEach { number in
                if let range = input.range(of: number.rawValue) { 
                    input = input.replacingOccurrences(of: number.rawValue, with: "\(number.index!)")
                    
                }
            }

     

     

    'developing study' 카테고리의 다른 글

    Swift - prefix, suffix  (0) 2024.01.12
    Swift - replacingOccurences/Subrange  (0) 2024.01.12
    Swift- enumerated()  (1) 2024.01.11
    Swift - components이용해 문자열 쪼개기  (0) 2024.01.11
    Swift - compactmap  (0) 2024.01.08

    댓글

Designed by Tistory.