스위프트 - 열거형

3585 단어
  • 열거형은 관련 값 그룹에 대한 공통 유형을 정의하고 코드 내에서 유형이 안전한 방식으로 해당 값을 사용할 수 있도록 합니다. 열거형 정의는 새로운 유형을 정의합니다.
    예시 :

  • enum CompassPoint {
        case north
        case south
        case east
        case west
    }
    


  • CaseIterable 프로토콜을 준수하여 해당 열거형의 모든 사례를 수집합니다. 컴파일러는 관련 값이나 해당 사례에 대한 @available 속성이 없는 모든 열거형에 대한 CaseIterable 요구 사항의 구현을 자동으로 제공할 수 있습니다.

  • 예시 :

    enum CompassDirection: CaseIterable {
        case north, south, east, west
    }
    for direction in CompassDirection.allCases {
        //body
    }
    


    관련 값



    케이스 값과 함께 저장되는 모든 유형의 값(추가 정보)입니다. 연관된 값은 모든 유형이 될 수 있으며 값 유형은 케이스마다 다를 수 있습니다. 열거형의 각 인스턴스는 동일한 유형에 대해 서로 다른 연관된 값을 가질 수 있습니다.

    예시 :

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



    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).")
    }
    


    원시 값



    열거형 케이스는 모두 동일한 유형인 원시 값이라는 기본값으로 미리 채워질 수 있습니다. 각 원시 값은 열거 선언 내에서 고유해야 합니다. 특정 열거 케이스의 원시 값은 항상 동일합니다.

    예시 :

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


  • 정수 또는 문자열 원시 값을 저장하는 열거형의 경우 각 사례에 원시 값을 명시적으로 할당할 필요가 없습니다.

  • 예시 :

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


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

  • 예시 :

    let earthsOrder = Planet.earth.rawValue // earthsOrder is 3
    


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

  • 예시 :

    let possiblePlanet = Planet(rawValue: 7) //optional(Planet.uranus)
    


    원시 값 이니셜라이저는 실패할 수 있는 이니셜라이저입니다.

    재귀 열거



    재귀 열거형은 하나 이상의 열거 사례에 대한 연결된 값으로 열거형의 다른 인스턴스가 있는 열거형입니다. 열거형 케이스 앞에 간접적으로 써서 열거형 케이스가 재귀적임을 나타냅니다.

    예시 :

    enum ArithmeticExpression {
        case number(Int)
        indirect case addition(ArithmeticExpression, ArithmeticExpression)
        indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
    }
    // (5 + 4) * 2:
    let five = ArithmeticExpression.number(5)
    let four = ArithmeticExpression.number(4)
    let sum = ArithmeticExpression.addition(five, four)
    let product = ArithmeticExpression.multiplication(sum, ArithmeticExpression.number(2))
    



    func evaluate(_ expression: ArithmeticExpression) -> Int {
        switch expression {
        case let .number(value):
            return value
        case let .addition(left, right):
            return evaluate(left) + evaluate(right)
        case let .multiplication(left, right):
            return evaluate(left) * evaluate(right)
        }
    }
    print(evaluate(product)) // Prints "18"
    

    좋은 웹페이지 즐겨찾기