Menu
CoddyTech

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
false

Fungsi 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:

4

let 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
99
challenge icon

Tantangan

Mudah

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