반응형
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
부족한 점은 피드백해주시면 감사합니다😊
반응형
'iOS' 카테고리의 다른 글
[iOS] WKWebView 정리 Swift (1) | 2022.02.04 |
---|---|
[iOS] Unwind Segue (1) | 2021.11.11 |
[iOS] Outlets은 왜 옵셔널일까? (0) | 2021.06.18 |
[iOS] UIView & CALayer (0) | 2021.06.01 |
[iOS] Notification Center (0) | 2021.05.27 |
댓글