İ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’ı :
1 2 3 |
init(parameters) { statements } |
Convenience Initializer Sytax’ı :
Designated Initializer’a benzer, aralarındaki tek fark, convenience tanımlarken init’den önce kullandığımız convenience etiketi.
1 2 3 |
convenience init(parameters) { statements } |
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ş.
- 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 eğitimleri için teşekkürler, türkçe swift kaynağı olarak kod5’i takip ediyorum
[…] Sınıflarda Kalıtım ve İlk Değer Ataması […]