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:
rightEnum 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
eastraw 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
trueNilai 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]Tantangan
MudahLengkapi 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]))
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Class dan Object
Bekerja dengan FileMendefinisikan ClassMethod dan selfInitializerClass adalah ReferensiUlasan: Kartu Perpustakaan4Enkapsulasi
Kontrol AksesHanya Bisa Dibaca dari LuarMelindungi StateInitializer yang Bisa GagalRangkuman: Rekening Bank7Polimorfisme dan Generik
PolimorfismeKonversi TipeFungsi GenerikTipe GenerikRangkuman: Kalkulator Bentuk2Struct dan Tipe Nilai
StructSemantik NilaiMethod yang Mengubah NilaiStruct atau classRangkuman, Item Inventaris11Proyek: Manajemen Perpustakaan
Buku dan AnggotaPeminjaman Buku3Properti Lebih Dalam
Properti TerhitungPengamat PropertiAnggota StatisEnum dengan MethodRangkuman: Catatan SuhuLatihan sendiri: Playground Swift