İOS Swift

Swift Property’ler

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)

Yorum Yap