Menu
CoddyTech

Enum dengan Method

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Swift di Coddy. Pelajaran 15 dari 57.

enum mendefinisikan tipe dengan kumpulan kasus yang tetap. Nilai ditulis dengan titik, dan switch harus menangani setiap kasus, sehingga saat kamu menambahkan kasus nanti, setiap tempat yang perlu diperbarui akan terlihat:

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

Output:

right

Enum dapat memiliki method dan property komputasi. Di dalamnya, self adalah case saat ini:

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)

Output:

east
east

raw value mengaitkan nilai tetap dengan tipe tertentu ke setiap case. init(rawValue:) melakukan kebalikannya dan mengembalikan nil jika tidak ada case yang cocok:

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

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

Output:

M
true
true

Nilai terkait memungkinkan setiap kasus membawa datanya sendiri, sehingga satu tipe dapat menampung nilai dengan bentuk yang berbeda. switch mengikat data dengan 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 })

Output:

[20, 55]
challenge icon

Tantangan

Mudah

Lengkapi enum Command dengan kasus forward, back, left dan right, yang menggunakan nilai raw F, B, L dan R. Tambahkan property terhitung step yang mengembalikan perubahan posisi: forward 1, back -1, left dan right 0. Lalu lengkapi run(_:), yang mengubah setiap karakter menjadi perintah dengan init(rawValue:) (melewati karakter yang tidak dikenal) dan mengembalikan position 2, turns 1, skipped 1.

Kode yang disediakan membaca satu baris huruf perintah dan mencetak hasil run(_:).

Tulis kodemu di Command.swift dan Functions.swift. main.swift berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

// Kode input/output sudah disediakan: biarkan apa adanya
var input: [String] = []
while let line = readLine() { input.append(line) }
print(run(input[0]))
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Playground Swift