Struct Yapıları
Coddy'nin Swift Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 7 / 57.
Bir struct, bir sınıf gibi verileri ve metotları gruplar. Swift, her struct için her özellik başına bir parametre içeren bir memberwise initializer yazar; bu nedenle bir struct’ın kendine ait bir init tanımlamasına gerek yoktur:
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())Çıktı:
3
7Varsayılan değerlere sahip özellikler, üye bazlı başlatıcıda belirtilemeyebilir:
struct Settings {
var volume = 5
var muted = false
}
let quiet = Settings(volume: 1)
print(quiet.volume)
print(quiet.muted)Çıktı:
1
falselet sabitinde saklanan bir struct, var özellikleri bile olmak üzere hiçbir şekilde değiştirilemez. Değiştirmek için onu bir var içinde saklayın:
let fixed = Point(x: 1, y: 2)
// fixed.x = 5 // hata: atanamaz, fixed bir let sabiti
var moving = Point(x: 1, y: 2)
moving.x = 5 // iyiSwift'in kendi türlerinin çoğu struct'tır: Int, Double, String, Array ve Dictionary. Struct'larınız bu türlerle aynı şekilde davranır: bunlar yalın değerlerdir.
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())Çıktı:
12.50
3.05Görev
KolayItem adlı bir yapı bildirin; bu yapının name (String), price (Int, sent cinsinden) ve quantity (Int) özellikleri olsun. Fiyat ile miktarı çarpıp döndüren bir total() yöntemi ve 2 x tea = 350 döndüren bir line() yöntemi ekleyin.
Sağlanan kod, her satırda name,price,quantity biçiminde bir öğe okur, üye bazlı başlatıcıyı kullanarak her Item öğesini oluşturur ve line() çıktısını yazdırır. Ardından sum: ifadesini ve tüm toplamların toplamını yazdırır.
Kodunuz Item.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 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)")
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ç AlmaKendi başına pratik yap: Swift playground