-
Swift - CaseIterabledeveloping study 2024. 1. 12. 21:08
코테 문제풀이중에 enum을 배열처럼 순회하고 싶어서 알아보다가 알게 된 개념을 정리한다.
1. 개념
애플 문서에 나온대로 CaseIterable은 프로토콜이다. 이 프로토콜을 따르는 타입은 보통 관련 없는 value들의 열거형이다.
CaseIterable타입을 채택하면 'allCases'프로퍼티를 이용해 모든 컬렉션의 경우에 접근이 가능하다고 나와있다.
예로 보면 언제 사용할지 더 이해가 쉽다.
만약에 아래처럼 enum으로 방향에 관한 케이스들이 있다고 치면,
이 모든 케이스들을 for문처럼 순회해서 각 케이스들에 접근하고 싶다면 CaseIterable 프로토콜을 따르도록 해주면 되는 것.
enum CompassDirection: CaseIterable { case north, south, east, west }
이를 활용해서
//1. print("There are \(CompassDirection.allCases.count) directions.") // Prints "There are 4 directions." //2. let caseList = CompassDirection.allCases .map({ "\($0)" }) .joined(separator: ", ") // caseList == "north, south, east, west"
1번처럼 모든 케이스들의 count를 가져올 수 있고, 또는
2번처럼 map을 사용할 수도 있다.
나의 경우에는 아래의 enum을 forEach로 순회할 때 사용했다.
enum OriginNumber: String, CaseIterable { case zero = "zero" case one = "one" case two case three case four case five case six case seven case eight case nine case ten }
allCases에서 forEach를 사용할 수 있는데 이때 number는 한개의 case로 접근이 가능해진다.
OriginNumber.allCases.forEach { number in if let range = input.range(of: number.rawValue) { input = input.replacingOccurrences(of: number.rawValue, with: "\(number.index!)") } }
'developing study' 카테고리의 다른 글
Swift - prefix, suffix (0) 2024.01.12 Swift - replacingOccurences/Subrange (0) 2024.01.12 Swift- enumerated() (1) 2024.01.11 Swift - components이용해 문자열 쪼개기 (0) 2024.01.11 Swift - compactmap (0) 2024.01.08