Değer Semantiği
Coddy'nin Swift Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 8 / 57.
Struct'lar değer türleridir: bir struct'ı başka bir değişkene atamak, onu kopyalar. Kopyayı değiştirmek, bir sınıftan farklı olarak orijinali değiştirmez:
struct Point {
var x: Int
}
var a = Point(x: 1)
var b = a
b.x = 99
print(a.x)
print(b.x)Çıktı:
1
99Bir sınıfla yapılan aynı karşılaştırma farkı gösterir: her iki değişken de aynı nesneye başvurur.
class PointRef {
var x: Int
init(x: Int) { self.x = x }
}
let a = PointRef(x: 1)
let b = a
b.x = 99
print(a.x)Çıktı:
99Bir yapıyı bir işleve geçirmek aynı zamanda bir kopyasını da geçirir. Parametre sabit olduğundan, değiştirilen bir sürümü döndürmek için işlev yerel bir kopya oluşturur ve bunu döndürür:
struct Point {
var x: Int
}
func shifted(_ p: Point, by dx: Int) -> Point {
var copy = p
copy.x += dx
return copy
}
let start = Point(x: 1)
let moved = shifted(start, by: 4)
print(start.x)
print(moved.x)Çıktı:
1
5Yapı dizileri bağımsız değerler tutar. Bir öğeyi dizini aracılığıyla değiştirmek yalnızca o öğeyi değiştirir ve diziyi kopyalamak her değeri kopyalar:
struct Score {
var points: Int
}
var round1 = [Score(points: 1), Score(points: 2)]
var round2 = round1
round2[0].points = 50
print(round1[0].points)
print(round2[0].points)Çıktı:
1
50Görev
KolaytryDiscount(_:percent:) işlevini tamamla. Bir Price yapısı alır ve indirim uygulanmış bir kopya döndürür: sentleri yüzdeye göre azaltır ve aşağı yuvarlar. Sağlanan kod, orijinal fiyatı ve indirimli fiyatı yazdırır; bu nedenle orijinal değişmeden kalmalıdır.
Sağlanan kod, sent cinsinden bir fiyatı ve her satırda bir yüzde değerini okur ve her biri için was 1000, now 900 çıktısını yazdırır.
Kodun Price.swift ve Functions.swift dosyaları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) }
let original = Price(cents: Int(input[0])!)
for line in input.dropFirst() {
let cheaper = tryDiscount(original, percent: Int(line)!)
print("was \(original.cents), now \(cheaper.cents)")
}
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