Struct
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Swift di Coddy. Pelajaran 7 dari 57.
struct mengelompokkan data dan method seperti class. Swift menuliskan memberwise initializer untuk setiap struct, dengan satu parameter untuk setiap property, jadi struct tidak memerlukan init sendiri:
struct Point {
var x: Int
var y: Int
func distanceFromOrigin() -> Int {
abs(x) + abs(y)
}
}
let p = Point(x: 3, y: -4)
print(p.x)
print(p.distanceFromOrigin())Output:
3
7Property dengan nilai default dapat tidak disertakan dalam inisialisasi memberwise:
struct Settings {
var volume = 5
var muted = false
}
let quiet = Settings(volume: 1)
print(quiet.volume)
print(quiet.muted)Output:
1
falseStruct yang disimpan dalam konstanta let tidak dapat diubah sama sekali, bahkan properti var-nya. Simpan dalam var agar bisa mengubahnya:
let fixed = Point(x: 1, y: 2)
// fixed.x = 5 // error: tidak bisa mengubah nilainya, fixed adalah konstanta let
var moving = Point(x: 1, y: 2)
moving.x = 5 // bolehBanyak tipe bawaan Swift adalah struct: Int, Double, String, Array, dan Dictionary. Struct buatanmu berperilaku sama seperti tipe-tipe tersebut: semuanya adalah nilai biasa.
struct Money {
var cents: Int
func formatted() -> String {
"\(cents / 100).\(cents % 100 < 10 ? "0" : "")\(cents % 100)"
}
}
print(Money(cents: 1250).formatted())
print(Money(cents: 305).formatted())Output:
12.50
3.05Tantangan
MudahDeklarasikan struct Item dengan property name (String), price (Int, dalam sen), dan quantity (Int). Tambahkan method total() yang mengembalikan hasil perkalian price dengan quantity, dan method line() yang mengembalikan 2 x tea = 350.
Kode yang disediakan membaca satu item per baris dengan format name,price,quantity, membuat setiap Item dengan initializer memberwise, lalu mencetak line(). Setelah itu, kode mencetak sum: dan jumlah semua total.
Tulis kodemu di Item.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 sum = 0
for row in input {
let p = row.split(separator: ",").map(String.init)
let item = Item(name: p[0], price: Int(p[1])!, quantity: Int(p[2])!)
print(item.line())
sum += item.total()
}
print("sum: \(sum)")
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