Sınıflar Referanstır
Coddy'nin Swift Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 5 / 57.
Bir sınıf referans türüdür: bir değişken, nesnenin kopyasını değil, nesneye bir referansı tutar. Bir örneği başka bir değişkene atamak, aynı nesne için ikinci bir ad verir:
class Wallet {
var coins = 10
}
let mine = Wallet()
let alias = mine
alias.coins = 25
print(mine.coins)Çıktı:
25===, iki referansın aynı örneğe işaret edip etmediğini kontrol eder. Tüm özellikleri aynı olsa bile iki ayrı örnek farklı nesnelerdir:
class Wallet {
var coins = 10
}
let a = Wallet()
let b = a
let c = Wallet()
print(a === b)
print(a === c)Çıktı:
true
falseBir örnek alan işlev, çağıranın nesnesi üzerinde çalışır; bu nedenle işlev içinde yapılan değişiklikler sonrasında da görünür kalır:
class Wallet {
var coins = 10
}
func payFee(_ wallet: Wallet) {
wallet.coins -= 3
}
let w = Wallet()
payFee(w)
payFee(w)
print(w.coins)Çıktı:
4let başvuruyu sabitler, nesneyi değil. Bir sınıf örneğini tutan sabit başka bir örneğe işaret edemez, ancak örneğin var özellikleri yine de değiştirilebilir. Örnek dizileri de başvurular içerir:
class Wallet {
var coins = 10
}
let shared = Wallet()
let team = [shared, shared]
team[0].coins = 99
print(shared.coins)
print(team[1].coins)Çıktı:
99
99Görev
KolayBir ekip tek bir Budget paylaşır. Bir bütçe alan ve yalnızca yeterli miktar kaldıysa bu miktarı çıkaran, harcamaya izin verildiğinde true döndüren spend(_:amount:) işlevini tamamla. Ardından runTeam(start:purchases:) işlevini tamamla: tek bir bütçe oluştur, her satın almanın aynı bütçeden harcama yapmasını sağla ve her satın alma için bir satır (ok 30 veya denied 80) döndür; bunun ardından left 20 gelsin.
Sağlanan kod, başlangıç bütçesini ve satın almaları virgülle ayrılmış bir satır olarak okur ve döndürülen her satırı yazdırır.
Kodun Budget.swift ve Functions.swift dosyalarına yazılmalıdır. main.swift sağlanan giriş/çıkış kodunu içerir ve düzenlenemez.
Kendin dene
// Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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) }
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıfları TanımlamaMetotlar ve selfBaşlatıcılarSınıflar ReferanstırTekrar - Kütüphane Kartı4Kapsülleme
Erişim DenetimiDışarıdan Salt OkunurDurumu KorumaBaşarısız Olabilen BaşlatıcılarTekrar - Banka Hesabı7Polimorfizm ve Generic'ler
PolimorfizmTür DönüşümüGeneric FonksiyonlarGeneric TürlerTekrar - Şekil Hesaplayıcı2Struct Yapıları ve Değer Türleri
Struct YapılarıDeğer SemantiğiDeğiştirici MetotlarStruct mı Class mıTekrar - Envanter Öğesi5Kalıtım
Alt sınıflarMetotları Geçersiz KılmaBaşlatıcılar ve superfinal ve HiyerarşilerTekrar - Çalışan Hiyerarşisi11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç AlmaKendi başına pratik yap: Swift playground