Protocol

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

모든 값의 컬렉션을 제공해주는 형식이다.

enum 열거형의 값들을 배열 컬렉션과 같이 순회할 수 있도록 해주는 프로토콜이다.

CaseIterable프로토콜은 모든 case 값들에 대한 컬렉션을 제공하는 타입이다.

enum 타입에 CaseIterable 프로토콜을 채택해서 enum의 case값들을 for in loop 나 forEach 등으로 순회할 수 있다. 그 외 배열 컬렉션에서 사용하던 다양한 메서드 또한 사용이 가능하다.

CaseIterable 프로토콜과 allCases 타입 프로퍼티

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

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

enum 열거형으로 선언되어있는 CompassDirection은 CaseIterable 프로토콜을 채택하고 있다. 그렇기에 CompassDirection이 갖고 있는 case들을 배열과 같이 순회할 수 있게 된다. 이 때, 배열처럼 사용하기 위해 열거형의 타입 프로퍼티인 allCases를 사용할 수 있다.