Menu
Coddy logo textTech

메서드가 있는 열거형

Coddy Swift 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 15번째.

enum은 고정된 케이스 집합을 가진 타입을 정의합니다. 값은 점을 사용해 작성하며, switch는 모든 케이스를 처리해야 하므로 나중에 케이스를 추가하면 업데이트가 필요한 모든 위치가 표시됩니다:

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

let heading = Direction.east
switch heading {
case .north: print("up")
case .east: print("right")
case .south: print("down")
case .west: print("left")
}

출력:

right

열거형에는 메서드와 계산 프로퍼티가 있을 수 있습니다. 열거형 내부에서 self는 현재 케이스를 의미합니다:

enum Direction {
    case north, east, south, west

    var turnedRight: Direction {
        switch self {
        case .north: return .east
        case .east: return .south
        case .south: return .west
        case .west: return .north
        }
    }
}

print(Direction.north.turnedRight)
print(Direction.west.turnedRight.turnedRight)

출력:

east
east

raw value는 각 케이스에 한 가지 타입의 고정된 값을 연결합니다. init(rawValue:)는 반대로 동작하며 일치하는 케이스가 없으면 nil을 반환합니다:

enum Size: String {
    case small = "S", medium = "M", large = "L"
}

print(Size.medium.rawValue)
print(Size(rawValue: "L") == .large)
print(Size(rawValue: "XL") == nil)

출력:

M
true
true

연관 값을 사용하면 각 케이스가 자체 데이터를 가질 수 있으므로, 하나의 타입이 서로 다른 형태의 값을 저장할 수 있습니다. switch는 let을 사용해 데이터를 바인딩합니다:

enum Payment {
    case cash(amount: Int)
    case card(number: String, amount: Int)

    var amount: Int {
        switch self {
        case .cash(let amount): return amount
        case .card(_, let amount): return amount
        }
    }
}

let payments: [Payment] = [.cash(amount: 20), .card(number: "4242", amount: 55)]
print(payments.map { $0.amount })

출력:

[20, 55]
challenge icon

챌린지

쉬움

Command 열거형을 forward, back, left, right 케이스와 원시 값 F, B, L, R로 완성하세요. 위치의 변화를 반환하는 계산 프로퍼티 step을 추가하세요. forward는 1, back은 -1, left와 right는 0을 반환합니다. 그런 다음 각 문자를 init(rawValue:)를 사용해 명령으로 변환하고(알 수 없는 문자는 건너뜀), position 2, turns 1, skipped 1을 반환하는 run(_:)을 완성하세요.

제공된 코드는 명령 문자 한 줄을 읽고 run(_:)의 결과를 출력합니다.

코드는 Command.swift와 Functions.swift에 작성하세요. main.swift에는 제공된 입력/출력 코드가 있으며 편집할 수 없습니다.

직접 해보기

// 제공된 입력/출력 코드: 그대로 유지하세요
var input: [String] = []
while let line = readLine() { input.append(line) }
print(run(input[0]))
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: Swift 플레이그라운드