İOS Swift

Swift Sınıflarda Kalıtım ve İlk Değer Ataması

swift

İngilizcesi “Class Inheritance and Initialization” olarak geçen Sınıflarda Kalıtım ve İlk Değer Atama işlemi için Swift bize 2 adet initizalier tipi sunuyor.

  • Designated(belirlenmiş) initializers
  • Convenience(uygunluk, kolaylık) initializers

Designated Initializer

Designated initializer’lar sınıflar için öncelikli olan initializer’dır. Sınıf içerisindeki tüm  property’ler ve üst sınıftan çağrılan tüm property’lerin ilk değerlerini atamaktadır.

Sınıflarda çok az designated initializer’a sahip olma eğilimi vardır. Genellikle de 1 tane olur. Designated initilializerlar’ı bir huni olarak düşünebiliriz. Bu hunide hangi ilk değer atama işleminin yapılacağı süreci superclass zincirine kadar takip edilir.

Her sınıfta 1 tane designated initializer olmalıdır. Bazı durumlarda bu sayı artabilir.

Convenience Initializer

Convenience initializer’lar bir sınıf için ikincil  initializerlardır. Bunları designated initializer’ları çağırmak için kullanabiliriz. Aynı zamanda özel bir input için veya özel bir kullanım için bir sınıfın instance’ını oluşturmakta da kullanılabilir.

Convenience initializer’ları kullanma zorunluluğu yoktur.

Syntax:

Designated Initializer Syntax’ı :

Convenience Initializer Sytax’ı :

Designated Initializer’a benzer, aralarındaki tek fark, convenience tanımlarken init’den önce kullandığımız convenience etiketi.

 

Designated ve Convenience Initializer arasındaki ilişkiyi anlamak ve özetlemek için swift bize 3 temel kural sunuyor.

Kural 1

Bir designated initializer başka bir designated initializer’ı  kendi üst sınıfından çağırır.

Kural 2

Bir convenience initializer başka bir initializer’ı kendi sınıfından çağırır.

Kural 3

Bir convenience initializer eninde sonunda bir designated initializer’ı çağırmalı.

Bu kuralları kolayca akılda tutabilmek için

  • Designated initializerlar daima üst sınıftan çağırır.

  • Convenience initializerlar daima kendi sınıfından cağırır.

Apple’ın yayınladığı kaynakta bu kurallar çok güzel resmedilmiş.

swift initializer kuralları

  • Superclass’a baktığımızda bir convenience initializer‘ın başka bir tanesini çağırdığını ve onunda eninde sonunda designated initializer‘ı çağırdığını görebiliriyoruz. Bu özellikleri de Kural 2 ve Kural 3’te anlatmıştık.

 

  • Subclass’a baktığımızda ise bir convenience initializer‘ın bir designated initializer‘ı çağırdığını görebiliyoruz. Bunu Kural 3’te söylemiştik. Aynı zamanda Kural 1’de bahsettiğimiz “Bir designated initializer başka bir designated initializer’ı  kendi üst sınıfından çağırır.” ı da görebiliyoruz.,

 

Bu yapının biraz daha karmaşık halini incelemek ve öğrendiklerimizi pekiştirmek için şu resmi inceleyebilirsiniz:

swift initializer kuralları komplex

Türk Telekom Şirketinde CRM Çözümlerinde Teknik Analist olarak görev yapmaktayım. Geçmişte ise iOS uygulama geliştirici olarak çalıştım. Bilginin ve paylaşmanın gücüne can-ı gönülden inanırım..