Menu
Coddy logo textTech

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.0

Bir 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
2

Bir 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ı:

384

Tü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
}
challenge icon

Görev

Kolay

Order 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))
quiz iconKendini test et

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

Kendi başına pratik yap: Swift playground