Class - Enumerations

Eli·2021년 2월 7일
1

Swift

목록 보기
14/17
post-thumbnail

관련된 값을 공통의 type으로 선언해 안전성을 다룰 수 있도록 한다.
또 지정된 값들이라면 Swift에서는 Class처럼 Protocol 등을 따를 수 있어 코드 가독성 측면이나 관리하는 측면에 있어서 상당히 장점이 있다.

Syntax

//case를 통해 값을 선언
enum CompassPoint {
    case north
    case south
    case east
    case west
}

//한번에 선언
enum CompassPoint {
    case north, south, east, west
}

Switch

Switch 문에 매칭해 안전하게 사용가능

let directionToHead = CompassPoint.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")
}

Associated Values

각 열거형 케이스에 custom type을 저장가능

//괄호를 통해 각 값을 저장
enum Barcode {
    case upc(Int, Int, Int, Int)
    case qrCode(String)
}

let someBarcode = Barcode.qrCode("ddddssd")

Raw Values

각 case에 raw 값을 넣을 수 있다

//: Type을 써서 지정할 raw를 설정할 수 있다.
enum ASCIIControlCharacter: Character {
    case tab = "\t"
    case lineFeed = "\n"
    case carriageReturn = "\r"
}

//암시적으로 할당하는 raw값
enum Planet: Int {
	case mercury = 1
	//자동으로 2
	case venus
	//자동으로 3
	case earth
}

//raw 값으로 선언
let somePlanet = Planet(rawValue: 2) //Planet.venus

//없는 raw값일 경우 nil
let somePlanet = Planet(rawValue: 5) //nil

재귀 열거자

다른 열거 인스턴스를 관계 값으로 갖는 열거형

실제 사용케이스를 경험해보지 못해서 앞으로 더 스터디가 필요한 부분인 것 같다.

//재귀로 사용할 열거 값에 indirect 키워드 선언
enum ArithmeticExpression {
    case number(Int)
    indirect case addition(ArithmeticExpression, ArithmeticExpression)
    indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
}

//사용 방법
let four = ArithmeticExpression.number(4)
let sum = ArithmeticExpression.addition(five, four)

//재귀처리 함수
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))
profile
애플을 좋아한다. 그래서 iOS 개발을 한다. @Kurly

0개의 댓글