Struct atau class
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Swift di Coddy. Pelajaran 10 dari 57.
Panduan Swift adalah mulai dengan struct dan pilih class hanya saat kamu membutuhkan hal yang hanya ditawarkan class. Struct lebih sederhana: setiap variabel memiliki nilainya sendiri, jadi perubahan di satu tempat tidak pernah mengejutkan kode di tempat lain.
struct Temperature {
var celsius: Double
}
var today = Temperature(celsius: 21)
var yesterday = today
yesterday.celsius = 18
print(today.celsius)Output:
21.0Pilih class saat satu object harus digunakan bersama: beberapa bagian program perlu melihat state yang sama dan terus berubah, seperti satu rekening bank yang digunakan oleh banyak layar. Class juga mendukung pewarisan, yang tidak didukung oleh struct.
class SharedLog {
var lines: [String] = []
}
let log = SharedLog()
let moduleA = log
let moduleB = log
moduleA.lines.append("A started")
moduleB.lines.append("B started")
print(log.lines.count)Output:
2Struct dapat menggunakan == tanpa implementasi tambahan. Tambahkan Equatable ke deklarasi, lalu Swift membandingkan setiap property. Sebaliknya, class membandingkan identitas dengan ===:
struct Point: Equatable {
var x: Int
var y: Int
}
print(Point(x: 1, y: 2) == Point(x: 1, y: 2))
print(Point(x: 1, y: 2) == Point(x: 2, y: 1))Output:
true
falsePemeriksaan singkat: jika dua item dengan data yang sama seharusnya dianggap hal yang sama, gunakan struct (titik, harga, tanggal). Jika sebuah item memiliki identitas yang penting meskipun datanya sama dengan item lain (akun pengguna, file yang terbuka), gunakan class.
struct Money { var cents: Int } // 500 sen tetap 500 sen
class UserAccount { // dua akun bisa memiliki nama yang sama
let id: Int
var name: String
init(id: Int, name: String) { self.id = id; self.name = name }
}Tantangan
MudahPoint adalah struct yang seharusnya dapat dibandingkan dengan ==. Tambahkan conformance dan lengkapi countDistinct(_:), yang mengembalikan jumlah point berbeda dalam list (dua point dianggap sama jika kedua koordinatnya cocok).
Kode yang disediakan membaca satu point per baris dalam format x,y dan mencetak distinct: beserta jumlahnya.
Kodemu ditulis di Point.swift dan Functions.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) }
let points = input.map { line -> Point in
let p = line.split(separator: ",").map { Int($0)! }
return Point(x: p[0], y: p[1])
}
print("distinct: \(countDistinct(points))")
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