Hesaplanan Özellikler
Coddy'nin Swift Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 12 / 57.
Saklanan özellik bir değer tutar. Hesaplanan özellik depolama alanına sahip değildir: her okunduğunda kodu çalıştırır ve diğer özelliklerden hesaplanan bir değer döndürür:
struct Rectangle {
var width: Double
var height: Double
var area: Double {
width * height
}
}
var r = Rectangle(width: 3, height: 4)
print(r.area)
r.width = 10
print(r.area)Çıktı:
12.0
40.0Değer her okumada yeniden hesaplandığından, hesaplanmış bir özellik hiçbir zaman güncelliğini yitiremez. Parantez olmadan, saklanan bir özellik gibi okunur:
struct Person {
var first: String
var last: String
var fullName: String {
"\(first) \(last)"
}
}
var p = Person(first: "Ada", last: "Byron")
p.last = "Lovelace"
print(p.fullName)Çıktı:
Ada LovelaceHesaplanan bir özelliğin setter'ı da olabilir. set, yeni değeri newValue olarak alır ve dayandığı depolanan özellikleri günceller:
struct Temperature {
var celsius: Double
var fahrenheit: Double {
get { celsius * 9 / 5 + 32 }
set { celsius = (newValue - 32) * 5 / 9 }
}
}
var t = Temperature(celsius: 100)
print(t.fahrenheit)
t.fahrenheit = 32
print(t.celsius)Çıktı:
212.0
0.0Diğerlerinden türeyen ve hesaplanması kolay olan bir değer için hesaplanan özellik kullanın. İşlem argüman alıyorsa veya maliyetliyse metot kullanın:
struct Order {
var items: [Int]
var total: Int { items.reduce(0, +) } // özellik: argüman yok
func total(withTax rate: Int) -> Int { // metot: bir argüman alır
total + total * rate / 100
}
}Görev
KolayCircle yapısını, depolanan radius özelliği ve salt okunur üç hesaplanmış özellikle tamamla: diameter (yarıçapın iki katı), area (Double.pi kullanılarak π r²) ve alanı String(format: "%.2f", area) kullanarak iki ondalık basamağa yuvarlanmış şekilde r=2.0 d=4.0 a=12.57 döndüren label.
Sağlanan kod her satırdan bir yarıçap okur, bir Circle oluşturur ve label değerini yazdırır. Ardından son dairenin yarıçapını iki katına çıkarır ve label değerini tekrar yazdırır; bu nedenle değerler yarıçapı takip etmelidir.
Kodun Circle.swift dosyasına yazılmalıdır. main.swift sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
import Foundation
// Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
var input: [String] = []
while let line = readLine() { input.append(line) }
var last = Circle(radius: 0)
for line in input {
last = Circle(radius: Double(line)!)
print(last.label)
}
last.radius *= 2
print(last.label)
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ç Alma3Özellikleri Derinlemesine İnceleme
Hesaplanan ÖzelliklerÖzellik GözlemcileriStatik ÜyelerMetotlu Enum'larTekrar - Sıcaklık GünlüğüKendi başına pratik yap: Swift playground