[swift] CaseIterable protocol
오늘은 강의를 듣던 중 넘나 유용해서 정리하게 된 CaseIterable protocol 특집!
CaseIterable는 못참지,,,
시작~
CaseIterable protocol
이 프로토콜은 "모든 값들은 컬렉션으로 제공해주는 타입"이에요.
보통 연관값(associated value)가 없는 열거형(Enum) 타입에서 주로 사용하쥬.
이 타입을 사용하면 allCases라는 속성을 통해서 모든 케이스들의 컬렉션에 접근할 수가 있어요.
뭔말이에유?
예시 ㄱㄱㄲㄲ ㄲㄱㄲㄱ
여기 CaseIterable 프로토콜을 채택한 열거형이 있습니다. (연관값 없음)
enum CompassDirection: CaseIterable {
case north, south, east, west
}
이렇게 CaseIterable 프로토콜을 채택하기만 하면, 아래와 같은 타입 속성이 저절로 구현이 되는거죠.
그래서 우리는 이 프로토콜을 채택한 타입에서 점문법(.)를 사용하여 allCases라는 속성에 접근이 가능쓰!
(그대신 타입 메서드기 때문에 항상 타입.속성으로 접근해야 함!)
우리가 만든 CompassDirection 열거형도 allCases 속성을 이용해 배열로 리턴이 될 수 있답니다.
또한 컬렉션으로 리턴되기 때문에 아래처럼 count 속성을 사용할 수 있어욧
enum CompassDirection: CaseIterable {
case north, south, east, west
}
let compassArray = CompassDirection.allCases
//[north, south, east, west]
print(CompassDirection.allCases.count)
//4
그리고 배열이기 때문에, for-in 반복문에서도 활용이 가능하겠쥬?
for i in CompassDirection.allCases {
print("CompassDirection : \(i)")
}
//CompassDirection : north
//CompassDirection : south
//CompassDirection : east
//CompassDirection : west
고차함수와도 활용해볼 수 있어요11. (map 활용)
let compassArray = CompassDirection.allCases.map { direction in
return "My compass is \(direction)"
}
/*
["My compass is north",
"My compass is south",
"My compass is east",
"My compass is west"]
*/
고차함수와도 활용해볼 수 있어요22. (map&joined 활용)
let compassArray = CompassDirection.allCases.map { direction in
return "My compass is \(direction)" }.joined(separator: ", ")
}
/*
"My compass is north,
My compass is south,
My compass is east,
My compass is west"
*/
joined()라는 메서드는 연속적인 요소들을 합쳐지게(joined) 만들어 새로운 문자열로 리턴을 해주는 메서드구요.
합쳐지는 과정에서 각 요소들 사이를 seperator라는 파라미터로 구별해줍니다.
저는 ", "라는 seperator를 사용해서 각 값들을 구분해준거구요.
그 외에도 기본적으로 배열이기 때문에 아래와 같은 속성/메서드들도 사용이 가능해요.
CompassDirection.allCases.randomElement()
//east
CompassDirection.allCases.endIndex
//4
CompassDirection.allCases.isEmpty
//false
(당연하겠지만) 이미 정의된 열거형의 케이스들을 활용하는 것이기 때문에? 배열의 요소에 변화를 가져오는 것은 안되더라구요.
removeAll(), removeFirst(), removeLast()와 같은 것들이요.
언제 사용할지는 잘 모르겠지만? 그냥 유용할 것 같다는 너낌이 오는 CaseIterable protocol에 대해 알아봤습니다.
힙하게 CaseIterable protocol 쓰는 그날까지 나 샛기 화이팅,,,
https://developer.apple.com/documentation/swift/caseiterable/
Apple Developer Documentation
developer.apple.com