열거

열거형은 관련 값 그룹에 대한 공통 유형을 정의하고 코드 내에서 유형이 안전한 방식으로 해당 값으로 작업할 수 있도록 합니다.

통사론:

enum SomeEnum {
//code
}


예시:

enum CompassPoints{
case north
case south
case east
case west
}

enum CompassPoints{
case north,south,east,west 
}



메모:
  • 정의된 값은 열거형 케이스이며, 우리는 case 키워드를 사용하여 새로운 열거형 케이스를 도입합니다.
  • Swift 열거형 케이스는 C 및 Objective-C와 같은 언어와 달리 기본적으로 정수 값이 설정되어 있지 않습니다. 위의 CompassPoint 예에서 북쪽, 남쪽, 동쪽 및 서쪽은 암시적으로 0, 1, 2 및 3과 같지 않습니다.

  • 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"
    


    열거형 반복



    일부 열거형의 경우 해당 열거형의 모든 경우를 수집하는 것이 유용합니다. 열거형 이름 뒤에 CaseIterable을 작성하여 활성화합니다. Swift는 모든 케이스의 컬렉션을 열거형의 allCases 속성으로 노출합니다.

    enum Beverage: CaseIterable {
        case coffee, tea, juice
    }
    let numberOfChoices = Beverage.allCases.count
    print("\(numberOfChoices) beverages available")
    // Prints "3 beverages available"
    
    for beverage in Beverage.allCases {
        print(beverage)
    }
    // coffee
    // tea
    // juice
    
    


    위의 예에서 사용된 구문은 열거형을 CaseIterable 프로토콜을 준수하는 것으로 표시합니다.

    관련 값



    주어진 유형의 관련 값을 저장하기 위해 Swift 열거형을 정의할 수 있으며 필요한 경우 열거형의 각 경우에 대해 값 유형이 다를 수 있습니다.

    enum Barcode {
        case upc(Int, Int, Int, Int)
        case qrCode(String)
    }
    
    var productBarcode = Barcode.upc(8, 85909, 51226, 3)
    productBarcode = .qrCode("ABCDEFGHIJKLMNOP")
    


    원시 값



    연결된 값의 대안으로 열거형 케이스는 모두 동일한 유형인 기본값(원시 값이라고 함)으로 미리 채워질 수 있습니다.

    enum ASCIIControlCharacter: Character {
        case tab = "\t"
        case lineFeed = "\n"
        case carriageReturn = "\r"
    }
    


    메모:
  • 원시 값은 문자열, 문자 또는 정수 또는 부동 소수점 숫자 유형일 수 있습니다.
  • 각 원시 값은 열거 선언 내에서 고유해야 합니다.
  • 원시 값은 연결된 값이 아니며 채워진 값의 집합입니다.

  • 암시적으로 할당된 원시 값



    정수 또는 문자열 원시 값을 저장하는 열거로 작업할 때 각 경우에 원시 값을 명시적으로 할당할 필요가 없습니다. 그렇지 않으면 Swift가 자동으로 값을 할당합니다.

    enum Planet: Int {
        case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
    }
    


    위의 예에서 Planet.mercury는 1의 명시적 원시 값을 갖고 Planet.venus는 2의 암시적 원시 값을 갖는 식입니다.

    enum CompassPoint: String {
        case north, south, east, west
    }
    


    위의 예에서 CompassPoint.south는 "south"등의 암시적 원시 값을 갖습니다.

    rawValue 속성을 사용하여 열거형 케이스의 원시 값에 액세스합니다.




    let earthsOrder = Planet.earth.rawValue
    // earthsOrder is 3
    
    let sunsetDirection = CompassPoint.west.rawValue
    // sunsetDirection is "west"
    


    원시 값에서 초기화



    원시 값 유형으로 열거형을 정의하면 열거형은 원시 값 유형의 값(rawValue라는 매개변수로)을 취하고 열거형 케이스 또는 nil을 반환하는 이니셜라이저를 자동으로 수신합니다. 이 이니셜라이저를 사용하여 열거형의 새 인스턴스를 만들 수 있습니다.

    let possiblePlanet = Planet(rawValue: 7)
    // possiblePlanet is of type Planet? and equals Planet.uranus
    
    


    재귀 열거



    재귀 열거형은 열거형의 다른 인스턴스를 하나 이상의 열거형 사례에 대한 연결된 값으로 갖는 열거형입니다. 열거형 케이스가 재귀적임을 나타내기 위해 컴파일러에게 필요한 간접 참조 계층을 삽입하도록 지시합니다.

    enum ArithmeticExpression {
        case number(Int)
        indirect case addition(ArithmeticExpression, ArithmeticExpression)
        indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
    }
    
    //You can also write indirect before the beginning of the enumeration to enable indirection for all of the enumeration’s cases that have an associated value:
    
    indirect enum ArithmeticExpression {
        case number(Int)
        case addition(ArithmeticExpression, ArithmeticExpression)
        case multiplication(ArithmeticExpression, ArithmeticExpression)
    }
    

    좋은 웹페이지 즐겨찾기