Statik Üyeler
Coddy'nin Swift Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 14 / 57.
static özelliği herhangi bir örneğe değil, doğrudan türe aittir. Tam olarak bir kopyası vardır ve tür adı üzerinden okunur:
struct Temperature {
static let freezing = 0.0
static let boiling = 100.0
var celsius: Double
}
print(Temperature.boiling - Temperature.freezing)Çıktı:
100.0Bir static var değişebilir; bu da onu oluşturulan örneklerin sayacında olduğu gibi tüm örnekler tarafından paylaşılan veriler için kullanışlı kılar:
class Ticket {
static var issued = 0
let number: Int
init() {
Ticket.issued += 1
number = Ticket.issued
}
}
let a = Ticket()
let b = Ticket()
print(a.number)
print(b.number)
print(Ticket.issued)Çıktı:
1
2
2Bir static func, tür üzerinde çağrılır. Üzerinde çalışabileceği bir self örneği yoktur; bu nedenle yalnızca bağımsız değişkenlerini ve diğer statik üyeleri kullanır. Yardımcılar ve örnekler oluşturmanın adlandırılmış yolları için iyi bir yerdir:
struct Color {
var red: Int
var green: Int
var blue: Int
static func gray(_ level: Int) -> Color {
Color(red: level, green: level, blue: level)
}
}
let c = Color.gray(128)
print(c.red + c.green + c.blue)Çıktı:
384Türün içinde Self, türü adlandırmanın başka bir yoludur; bu nedenle statik üyeler Self.issued şeklinde yazılabilir. Örnek yöntemler statik üyeleri okuyabilir, ancak statik bir yöntem örnek özelliklerini okuyamaz; çünkü bir örnek üzerinde çağrılmaz.
struct Level {
static let maximum = 10
var current = 1
func isMax() -> Bool { current == Self.maximum } // örnek statik okur
static func describe() -> String { "levels 1-\(maximum)" } // statik statik okur
}Görev
KolayOrder sınıfını tamamla. Statik nextId özelliği 1'den başlar ve her yeni sipariş, mevcut nextId değerini id olarak alıp bu değeri artırır. Statik sabit taxPercent 10'dur. Örnek yöntem total(), ara toplam ile vergiyi (aşağı yuvarlanmış) toplar ve sonucu döndürür; statik yöntem summary(of:) bir sipariş dizisi alır ve 3 orders, 660 total değerini döndürür.
Sağlanan kod, her satırda bir ara toplam okur, her biri için bir sipariş oluşturur, her sipariş için #1: 110 yazdırır ve son olarak özeti yazdırır.
Kodun Order.swift dosyasına yazılmalıdır. main.swift sağlanan 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 orders: [Order] = []
for line in input {
let order = Order(subtotal: Int(line)!)
orders.append(order)
print("#\(order.id): \(order.total())")
}
print(Order.summary(of: orders))
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ç Alma3Özellikleri Derinlemesine İnceleme
Hesaplanan ÖzelliklerÖzellik GözlemcileriStatik ÜyelerMetotlu Enum'larTekrar - Sıcaklık GünlüğüKendi başına pratik yap: Swift playground