본문 바로가기

swift 기본 문법

swift enum CaseIterable, map 알아보기

반응형

enum에 CaseIterable이라는 프로토콜이 있다. 

 

공식문서에는 

A type that provides a collection of all of its values.

모든 값의 컬렉션을 제공하는 형식이라고 나타나있다. 

 

한마디로 CaseIterable을 붙임으로써 열거형의 값들을 배열 같이 순회활 수 있도록 해주는 프로토콜이다. 

 

간단한 예시부터 어떻게 사용할 수 있을지 고민해보도록 하겠다.

 

enum colorCase : CaseIterable {
    case white
    case black
}

for i in colorCase.allCases {
    print(i)
}
enum diaryCase : CaseIterable {
    case aloneDiary
    case commentDiary
    case notDiaryDay
    
    var diaryTitle: String {
        switch self {
        case .aloneDiary:
            return "혼자 쓴 일기"
        case .commentDiary:
            return "코멘트 일기"
        case .notDiaryDay:
            return "일기 쓸 날 아님 "
        }
    }
}

let diaryArray = diaryCase.allCases
for diary in diaryArray {
    if diary.diaryTitle == "혼자 쓴 일기" {
        print(diary)
    }
}

 

CaseIterable을 채택하고 allCases를 통해 순회하면서 프로퍼티에 접근하는 하는 방법이다. 

 

let colors = colorCase.allCases
for color in colors {
    if color == .black {
        print(color)
    }
}

다음과 같이 반복문을 활용하여 colorCase 열거형과 조건이 일치하다면 그에 따른 결과를 나타낼 수 있다. 

 

CaseIterable을 사용하다보면 map이라는 개념이 반드시 따라오는 것 같다. 

 

map

Returns an array containing the results of mapping the given closure over the sequence 's elements

시퀀스의 요소에 주어진 클로저를 매핑하는 결과를 포함하는 배열을 반환

이라고 한다!

간단히 말해서 자신을 호출할 때 매개변수로 전달된 함수를 실행하여 그 결과값을 다시 반환해주는 함수라고 할 수 있겠다.

 

let numbers: [Int] = [0, 1, 2, 3, 4]

var plusNumber = numbers.map { (num) in
    num  + 2
}
print(plusNumber) //[2, 3, 4, 5, 6]

 

이것들을 이용해서 어떻게 써먹을 수 있을까??

enum으로 세팅한 값들을 리스트로 보여줘야 하는 경우 사용할 수 있을 것 같다. 

 

반응형