Swift'te convention ve designated başlatıcılar arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
-
Tanımlanmış Başlatıcı: Sınıftaki ana, "temel" başlatıcıdır. Sınıfın tüm kendi saklanan özelliklerini tamamen başlatmalı ve ardından üst sınıfın tanımlanmış başlatıcısını (
super.init) çağırmalıdır. Her sınıfın en az bir tanımlanmış başlatıcıya sahip olması gerekir. -
Kolaylık Başlatıcısı: Belirli senaryolarda sınıf örneklerinin oluşturulmasını basitleştirmeye yönelik yardımcı bir başlatıcıdır. Mutlaka aynı sınıftaki başka bir başlatıcıyı — ya tanımlanmış ya da kolaylık başlatıcısı — çağırmalıdır. Sonuç olarak, kolaylık başlatıcılarının çağrı zinciri, aynı sınıftaki tanımlanmış başlatıcı çağrısına yol açmalıdır. Kolaylık başlatıcıları isteğe bağlıdır.
İşte başlatma delegasyon şeması:
Convenience -> Designated (aynı sınıfta)
Designated -> Designated (üst sınıfta)
Örnek:
class MyClass {
var value: Int
var name: String
// Tanımlanmış başlatıcı
init(value: Int, name: String) {
self.value = value
self.name = name
}
// Kolaylık başlatıcı
convenience init(value: Int) {
self.init(value: value, name: "DefaultName") // Aynı sınıftaki tanımlanmış başlatıcıyı çağırır
}
// Başka bir kolaylık başlatıcı
convenience init(name: String) {
self.init(value: 0, name: name) // Aynı sınıftaki tanımlanmış başlatıcıyı çağırır
}
}
let instance1 = MyClass(value: 10, name: "Custom")
let instance2 = MyClass(value: 5)
let instance3 = MyClass(name: "Another")
Ana fark, başlatma zincirindeki rolleri ve delegasyon kurallarıdır: Tanımlanmış başlatıcı, özelliklerinin tam başlatılmasını sağlar ve üst sınıfın başlatıcısına delegasyon yapar, oysa kolaylık başlatıcısı, aynı sınıf içindeki başka bir başlatıcıya delegasyon yaparak nesne oluşturmayı basitleştirir ve sonunda tanımlanmış başlatıcıyı çağırır.