iOS
[iOS] CaseIterable
thoonk:
2021. 6. 27. 15:31
반응형
CaseIterable 프로토콜에 관해 기록합니다.
protocol CaseIterable
CaseIterable 프로토콜을 사용하면 Collection과 같이 enum의 값들을 순회할 수 있도록 해준다.
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"
위 코드와 같이 CompassDirection의 allCases 프로퍼티를 통해 cases에 접근할 수 있다.
여기서 allCases는 이 타입의 모든 값의 collection이다.
위 코드를 보고 알 수 있듯이, allCases는 Collection 프르토콜을 따르므로 collection 타입에서 사용할 수 있던 map(), reduce() 등을 사용할 수 있다. 또한, count, isEmpty 등의 프로퍼티를 사용할 수 있다.
CaseIterable은 별도로 구현해야 할 것 없이 선언만 해주면 편하게 사용할 수 있다.
enum Language: String, CaseIterable {
case Korean = "kr"
case Chinese = "cn"
case Japenese = "jp"
}
// cases를 순차적으로 접근하여 출력
Language.allCases.forEach {
print("\($0): \($0.rawValue)")
}
/*
Korean: kr
Chinese: cn
Japenese: jp
*/
// cases의 개수 출력
print(Language.allCases.count) // 3
// case의 값이 k로 시작하는 case 출력
print(Language.allCases
.filter { $0.rawValue.prefix(1) == "k" }) // [Language.Korean]
참고:
https://developer.apple.com/documentation/swift/caseiterable
부족한 점은 피드백해주시면 감사합니다😊
반응형