İOS Swift

Swift Sınıf ve Structure Yapısı

Sınıf Yapısı

Sınıflar, programlarımızı yazmak için kullandığımız ve bunu yaparken de değişkenleri, sabitleri, metodları vs. tanımladığımız yapılara verilen genel isimdir.

Objective C ‘deki sınıf mantığı Swift programlama dili ile değişti. Bu yazımda bahsettiğim interface ve implementation kısımlarının ayrı ayrı kullanıldığı yapı kalkıyor ve yerine artık tek bir dosya ile bunu halledebildiğimiz yapı geliyor.

Sınıf ve Structure Yapılarının Karşılaştırılması

Sınıf ve Structure yapıları, bir çok özellik yönünden benzerlik göstermektedir. Bu iki yapıdada bulunan özellikler şunlardır:

  • Veri tutmak için property tanımlama
  • Fonksiyonellik için metodlar tanımlama
  • Subscript tanımlama
  • İlk değer için initializer tanımlama
  • Fonksiyonaliteyi artırmak için default yapıyı genişletebilme
  • Belirli türlerde standart fonksiyonaliteyi sağlamak için protokollere uyumlu olmak

Bunların yanı sıra, Sınıf’da olupda  Structure’da olmayan aşağıdaki özellikler mevcuttur:

  • Inheritance
  • Çalışma esnasında bir sınıf instannce’ının tipini yorumlama ve kontrol etme
  • Bir instance’ı release edip yerini boşaltabile
  • Bir’den fazla referansın bir sınıf instance’ını işaret edebilmesi

Tanımlama Syntax’ı

Sınıflar ve structure’lar benzer tanımlama syntax’ına sahiptir. Sınıfları tanımlarken class, structureları tanımlarken struct keywordünü kullanırız.

Apple’ın “The Swift Programming Language” kitabındaki örnek üzerinden konuyu daha ayrıntılı inceleyelim.

Sınıf ve Structure Tanımlama

Örneğimizde  VideoMode isminde bir sınıf tanımladık. Bu sınıf içerisinde resolution, interclased, frameRate ve name isimlerinde 4 adet property var.

Yeni Bir Instance Türetme

Oluşturduğumuz sınıf ve structure’dan someVideoMode ve someStructure isimlerinde instance türetelim.

Propertylere Erişme

 Sınıflarda Referans

Üstteki örnekte tekEighty isminde VideoMode instance’ı türettik. Property’lerinin değerlerini atadık. Daha sonra alsoTenEighty diye bir değişkene tenEighty’i atadık.

Fark ettiğiniz üzere, biz alsoTenEight’nin frameRate değerini değiştirdiğimiz halde, tenEighty’nin de frameRate değeri değişti.

Bunun sebebi, tenEighty ve alsoTenEight’nin değişken(variable) değil sabit(constant) olması. Bu iki değer VideoMode instance’ını tutmuyor. Biz bir değer değiştirdiğimiz zaman, onların referans gösterdiği arkadaki VideoMode instance ı değişiyor 🙂