메서드가 있는 열거형
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
eastraw 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]챌린지
쉬움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]))
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: Swift 플레이그라운드