-
Swift 5.6 Enumerations기술/iOS 2022. 3. 20. 17:44
Enumerations
Enumeration Syntax
enum CompassPoint { case north case south case east case west }
열거형 안에 정의된 값은 열거형 케이스 입니다. 새로운 열거형 케이스를 나타내기 위해 case 를 사용합니다.
여러개의 케이스는 콤마로 구분하여 한 줄로 표기할 수 있습니다.
각 열거형 정의는 새로운 타입으로 정의합니다. Swift 의 다른 타입처럼 대문자로 시작하는 그들의 이름이 ( CompassPoint ) 타입입니다. 열거형 타입에 복수 이름이 아닌 단수 이름으로 지정하여 읽기 쉽습니다.
Matching Enumeration Values with Switch Statement
switch 구문으로 각각의 열거형 값을 일치시킬수 있습니다.
directionToHead = .south switch directionToHead { case .north: print("Lots of planets have a north") case .south: print("Watch out for penguins") case .east: print("Where the sun rises") case .west: print("Where the skies are blue") } // Prints "Watch out for penguins"
Iterating over Enumeration Cases
일부 열거형의 경우 열거형의 모든 케이스를 수집하는 것이 유용합니다. 열거형 이름 뒤에 : CCaseIterable 을 작성하여 활성화 합니다. Swift 는 열거형 타입에 allCases 프로퍼티로 모든 케이스를 수집하고 방출합니다.
for beverage in Beverage.allCases { print(beverage) } // coffee // tea // juice
Associated Values
enum Barcode { case upc(Int, Int, Int, Int) case qrCode(String) }
이 정의는 어떠한 실질적인 Int 또는 String 을 제공하지 않습니다. 이것은 단지 Barcode.upc 또는 Barcode.qrCode 와 같을 때 Barcode 상수와 변수에 저장할 수 있는 연관된 값의 타입을 정의할 뿐입니다.
그러면 이러한 타입을 이용해서 새로운 바코드를 생성할 수 있습니다.
var productBarcode = Barcode.upc(8, 85909, 51226, 3)
switch productBarcode { case .upc(let numberSystem, let manufacturer, let product, let check): print("UPC: \\(numberSystem), \\(manufacturer), \\(product), \\(check).") case .qrCode(let productCode): print("QR code: \\(productCode).") } // Prints "QR code: ABCDEFGHIJKLMNOP."
Raw Values
연관된 값의 대안으로 열거형 케이스는 모두 동일한 타입의 기본값(원시값)으로 미리 채워질 수 있습니다.
Implicitly Assigned Raw Values
정수 또는 문자열 원시값이 저장된 열거형으로 동작 시 각 케이스에 명시적으로 원시값을 가질 필요가 없습니다. 원시값을 지정하지 않으면 Swift 는 자동으로 값을 할당합니다.
예를 들어 정수를 원시값으로 사용하면 각 케이스의 암시적 값은 이전 케이스보다 하나씩 증가합니다.
enum Planet: Int { case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune }
아래는 문자열 원시값으로 나타내는 버전입니다.
enum CompassPoint: String { case north, south, east, west }
rawValue 프로퍼티를 통해 열거형 케이스의 원시 값에 접근할 수 있습니다.
let earthsOrder = Planet.earth.rawValue // earthsOrder is 3 let sunsetDirection = CompassPoint.west.rawValue // sunsetDirection is "west"
Initializing from a Raw Value
원시 값 타입으로 열거형을 정의한다면 열거혀 원시값의 타입을 사용하는 초기화를 자동으로 수신하고 열거형 케이스 또는 nil 을 반환합니다.
let possiblePlanet = Planet(rawValue: 7) // possiblePlanet is of type Planet? and equals Planet.uranus
만약 rawValue 가 없는 값을 채택했더라면 nil 을 반환합니다. 때문에 여기서 Planet 반환타입은 Planet? 입니다.
Recursive Enumerations
재귀 열거형은 열거형 케이스에 하나 이상의 연관된 값으로 열거형 다른 인스턴스를 가지고 있는 열거형입니다. 열거형 케이스가 재귀적임을 나타내기위해 케이스 작성 전에 indirect 를 작성하여 컴파일러에게 필요한 간접 계층을 삽입하도록 지시합니다.
'기술 > iOS' 카테고리의 다른 글
Swift 5.6 Properties (0) 2022.03.20 Swift 5.6 Structures and Classes (0) 2022.03.20 Swift 5.6 Closures (0) 2022.03.20 Swift 5.6 Functions (0) 2022.03.20 Swift 5.6 Control Flow (0) 2022.02.26 TAG