Anggota Statis
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Swift di Coddy. Pelajaran 14 dari 57.
Property static dimiliki oleh tipe itu sendiri, bukan oleh instance mana pun. Hanya ada satu salinan, yang diakses melalui nama tipe:
struct Temperature {
static let freezing = 0.0
static let boiling = 100.0
var celsius: Double
}
print(Temperature.boiling - Temperature.freezing)Output:
100.0static var dapat berubah, sehingga berguna untuk data yang dibagikan oleh semua instance, seperti penghitung jumlah instance yang telah dibuat:
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)Output:
1
2
2static func dipanggil pada tipe. Fungsi ini tidak memiliki instance self untuk digunakan, jadi fungsi ini hanya menggunakan argumen dan anggota statis lainnya. Fungsi ini cocok digunakan untuk helper dan cara bernama untuk membuat instance:
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)Output:
384Di dalam tipe tersebut, Self adalah cara lain untuk menyebut tipe itu, sehingga anggota statis dapat ditulis sebagai Self.issued. method instance dapat membaca anggota statis, tetapi method statis tidak dapat membaca property instance karena method tersebut tidak dipanggil pada sebuah instance.
struct Level {
static let maximum = 10
var current = 1
func isMax() -> Bool { current == Self.maximum } // instans membaca static
static func describe() -> String { "levels 1-\(maximum)" } // static membaca static
}Tantangan
MudahLengkapi class Order. Property statis nextId dimulai dari 1, dan setiap order baru menggunakan nextId saat ini sebagai id-nya lalu menaikkan nilainya. Konstanta statis taxPercent bernilai 10. Method instance total() mengembalikan subtotal ditambah pajak (dibulatkan ke bawah), dan method statis summary(of:) menerima array berisi order dan mengembalikan 3 orders, 660 total.
Kode yang disediakan membaca satu subtotal per baris, membuat order untuk setiap subtotal, mencetak #1: 110 untuk setiap order, lalu mencetak ringkasannya.
Tulis kodemu di Order.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) }
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))
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Class dan Object
Bekerja dengan FileMendefinisikan ClassMethod dan selfInitializerClass adalah ReferensiUlasan: Kartu Perpustakaan4Enkapsulasi
Kontrol AksesHanya Bisa Dibaca dari LuarMelindungi StateInitializer yang Bisa GagalRangkuman: Rekening Bank7Polimorfisme dan Generik
PolimorfismeKonversi TipeFungsi GenerikTipe GenerikRangkuman: Kalkulator Bentuk2Struct dan Tipe Nilai
StructSemantik NilaiMethod yang Mengubah NilaiStruct atau classRangkuman, Item Inventaris11Proyek: Manajemen Perpustakaan
Buku dan AnggotaPeminjaman BukuLatihan sendiri: Playground Swift