Class adalah Referensi
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Swift di Coddy. Pelajaran 5 dari 57.
class adalah tipe referensi: variabel menyimpan referensi ke object, bukan salinannya. Menetapkan sebuah instance ke variabel lain memberikan nama kedua untuk object yang sama:
class Wallet {
var coins = 10
}
let mine = Wallet()
let alias = mine
alias.coins = 25
print(mine.coins)Output:
25=== memeriksa apakah dua referensi menunjuk ke instance yang sama. Dua instance terpisah adalah object yang berbeda, meskipun semua property-nya cocok:
class Wallet {
var coins = 10
}
let a = Wallet()
let b = a
let c = Wallet()
print(a === b)
print(a === c)Output:
true
falseFungsi yang menerima sebuah instance bekerja pada object milik pemanggil, sehingga perubahan yang dibuat di dalam fungsi tetap terlihat setelahnya:
class Wallet {
var coins = 10
}
func payFee(_ wallet: Wallet) {
wallet.coins -= 3
}
let w = Wallet()
payFee(w)
payFee(w)
print(w.coins)Output:
4let menetapkan referensi, bukan object. Konstanta yang menyimpan instance class tidak dapat menunjuk ke instance lain, tetapi property var milik instance tersebut tetap dapat berubah. Array yang berisi instance juga menyimpan referensi:
class Wallet {
var coins = 10
}
let shared = Wallet()
let team = [shared, shared]
team[0].coins = 99
print(shared.coins)
print(team[1].coins)Output:
99
99Tantangan
MudahSebuah tim menggunakan satu Budget bersama. Lengkapi spend(_:amount:), sebuah fungsi yang menerima anggaran dan mengurangi jumlahnya hanya jika sisa anggarannya cukup, lalu mengembalikan true jika pengeluaran diizinkan. Lalu lengkapi runTeam(start:purchases:): buat satu anggaran, biarkan setiap pembelian menggunakan anggaran yang sama, lalu kembalikan satu baris untuk setiap pembelian (ok 30 atau denied 80) diikuti left 20.
Kode yang disediakan membaca anggaran awal dan daftar pembelian dalam satu baris yang dipisahkan koma, lalu mencetak setiap baris yang dikembalikan.
Tulis kodemu di Budget.swift dan Functions.swift. main.swift berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
// Kode input/output yang disediakan: biarkan apa adanya
var input: [String] = []
while let line = readLine() { input.append(line) }
let purchases = input[1].split(separator: ",").map { Int($0)! }
for line in runTeam(start: Int(input[0])!, purchases: purchases) { print(line) }
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 BukuLatihan sendiri: Playground Swift