Property dediğimiz “özellikler” sınıf, structure yada enum içerisindeki değerleri yine sınıf, structure yada enum ile ilişkilendirir. (Attribute)
2 tür property bulunur.
- Stored Property
- Computed Property
Bunlardan Stored Property sınıf ve structurelar tarafından, Computed Property de sınıf,structure ve enumlar tarafından desteklenmektedir.
Stored Property
En basit anlatımıyla Stored Property bir sınıf ve structure instance’ında bulunan değişken veya sabitlerdir. Sabitler ve değişkenler hakkında ayrıntılı bilgi almak isterseniz Sabitler ve Değişkenler yazıma göz atabilirsiniz.
struct FixedLengthRange { var firstValue: Int let length: Int } var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3) // aralıkta 0, 1, and 2 değerleri vardır rangeOfThreeItems.firstValue = 6 // aralıkta 6,7 ve 8 değerleri vardır. //uzunluk structure içerisinde sabit olduğu için en fazla 3 olabilir
Üstteki FixedLengthRange structure’ırının instancelarında firstValue ve length isminde 2 tane propertysi bulunmakta. firstValue propertysi değişken olduğu için istediğimiz değeri verebiliyoruz. Örnekte önce 0 sonra 6 değerini verdik. Ancak length sabit olduğu için onun değerini değiştiremiyoruz, 3 olarak kalıyor.
Sabit Stored Property
Üstteki örnekte rangeOfThreeItems instance’ımız değişken olarak tanımlanmıştı. Peki bu instance sabit olarak tanımlanırsa ne olur ?
let rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4) // aralıktaki değerler şu anda 0, 1, 2, and 3 rangeOfFourItems.firstValue = 6 // firstValue değeri değişken olduğu halde, hata verecektir. // Çünkü rangeOfFourItems sabit olarak tanımlandı.
Sabit olarak tanımladığımız instanceların propertyleri değişken olsa bile değiştirilememektedir. Üstteki örnekte bunu görebilirsiniz.
Lazy Stored Property
Lazy yani tembel stored propertyler, ilk değerleri kullanıcakları an gelene kadar hesaplanmayan propertylerdir. Tanımlamak için başlarına lazy yazılması yeterlidir.
Computed Property
Türkçesi hesaplanmış özellik olarak geçen Computed Propertyler sınıflar, structurelar ve enumlar tarafından destekleniyor. Bu propertyler bir değer tutmaz, gerektiği zaman getter ve setter(opsiyonel) ile değerleri diğer propertylerden alarak yada değerleri diğer propertylere kaydederek yönetir.
struct Point { var x = 0.0, y = 0.0 } struct Size { var width = 0.0, height = 0.0 } struct Rect { var origin = Point() var size = Size() var center: Point { get { let centerX = origin.x + (size.width / 2) let centerY = origin.y + (size.height / 2) return Point(x: centerX, y: centerY) } set(newCenter) { origin.x = newCenter.x - (size.width / 2) origin.y = newCenter.y - (size.height / 2) } } } var square = Rect(origin: Point(x: 0.0, y: 0.0), size: Size(width: 10.0, height: 10.0)) let initialSquareCenter = square.center square.center = Point(x: 15.0, y: 15.0) println("square.origin değeri : ((square.origin.x), (square.origin.y))") // Konsola "square.origin değeri : (10.0, 10.0)