Erişim Denetimi
Coddy'nin Swift Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 17 / 57.
Kapsülleme, bir türün verilerinin nasıl kullanılabileceğini denetlemesi anlamına gelir. Erişim denetimi, bir özelliği veya yöntemi kimlerin görebileceğine karar verir. Bir üyeyi private olarak işaretlemek, onu türün dışındaki tüm kodlardan (ve aynı dosyadaki uzantılarından) gizler:
struct Account {
private var balance = 0
mutating func deposit(_ amount: Int) {
balance += amount
}
}
var a = Account()
a.deposit(50)
// a.balance = 1_000_000 // hata: 'balance' 'private' koruma seviyesi nedeniyle erişilemezKod dışındaki kısım yalnızca türün sunduklarını kullanabilir. Tür, her değişikliği denetleyebilir; böylece verileri hiçbir zaman türün izin vermediği bir durumda kalmaz:
struct Account {
private var balance = 0
mutating func deposit(_ amount: Int) {
if amount > 0 { balance += amount }
}
func report() -> String {
"balance: \(balance)"
}
}
var a = Account()
a.deposit(50)
a.deposit(-999)
print(a.report())Çıktı:
balance: 50Swift'te beş erişim düzeyi vardır. Bir anahtar sözcük kullanılmadığında bir üye internal olur: aynı modülün (uygulamanızın veya paketinizin) her yerinde görünür. En açıktan en kısıtlıya doğru düzeyler:
open // diğer modüller kullanabilir ve alt sınıf oluşturabilir (yalnızca sınıflar)
public // diğer modüller kullanabilir
internal // varsayılan: tüm modül
fileprivate // yalnızca bu kaynak dosya
private // bu tip (ve dosyadaki uzantıları)Özel yardımcı metotlar herkese açık yüzeyi küçük tutar: çağıranlar, türün bunu nasıl yaptığını değil, ne yaptığını görür.
struct Password {
private let text: String
init(_ text: String) { self.text = text }
var isStrong: Bool {
hasDigit() && text.count >= 8
}
private func hasDigit() -> Bool {
text.contains { $0.isNumber }
}
}
print(Password("secret123").isStrong)
print(Password("short1").isStrong)Çıktı:
true
falseGörev
KolayLocker yapısını tamamla. code ve items özellikleri private durumundadır. store(_:code:), yalnızca kod eşleştiğinde bir öğe ekler ve eklenip eklenmediğini döndürür; items(code:), kod eşleştiğinde depolanan öğeleri , ile birleştirerek (veya empty) döndürür, aksi takdirde wrong code döndürür.
Verilen kod, kilidin kodunu okur ve ardından put <code> <item> veya open <code> komutlarını işler. Her put için stored veya denied yazdırır; her open için ise sonucu yazdırır.
Kodun Locker.swift dosyasına yazılmalıdır. main.swift, verilen girdi/çıktı 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) }
var locker = Locker(code: input[0])
for cmd in input.dropFirst() {
let p = cmd.split(separator: " ").map(String.init)
if p[0] == "put" {
print(locker.store(p[2], code: p[1]) ? "stored" : "denied")
} else {
print(locker.items(code: p[1]))
}
}
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