Swift'te extensions, türleri — hem standart (örneğin, String, Array) hem de kendi tanımladığımız türleri genişletmek için bir araç olarak ortaya çıkmıştır; bunu, miras oluşturmadan veya orijinal kaynak kodunu değiştirmeden yapmaktadır. Yeni yöntemler, hesaplanan özellikler, protokollere abone olma ve hatta protokollere uyumluluk eklemeye olanak tanır, böylece kodun okunabilirliğini ve bütünsel mimarisini korur.
Sorun, extensions'un aşırı veya düzensiz kullanımıyla ortaya çıkar: türlerin orijinal davranışlarını kontrol etmek kolayca kaybolabilir, isim çakışmaları oluşabilir ve özellikle büyük projelerde veya üçüncü parti kütüphanelerle çalışırken nereden neyin geldiğini izlemek zorlaşır.
Çözüm, extensions'ı anlamlı gruplara organize etmek, net bir belge oluşturmak ve mevcut isimlerle çakışmaları önlemek için gerekirse erişim alanını sınırlamaktır (örneğin, fileprivate veya internal ile).
Kod örneği:
extension String { var isEmail: Bool { return self.contains("@") && self.contains(".") } func trimmed() -> String { return trimmingCharacters(in: .whitespacesAndNewlines) } }
Anahtar Özellikler:
Bir extension aracılığıyla stored property eklemek mümkün mü?
Hayır, extension yalnızca hesaplanan özellikler ve yöntemler eklemeye izin verir. Stored properties (depolanan özellikler) extension aracılığıyla eklenemez. Denediğinizde, derleyici hemen bir hata verecektir.
İki farklı extension'da aynı isimde yöntemlerin tanımlanmasının sonucu ne olur?
İsim çakışması oluşacaktır; Swift, hangi yöntemin çağrılacağına karar veremeyecek ve hata derleme aşamasında ortaya çıkacaktır.
Extensions, yalnızca extension içinde görünen private yöntemleri gerçekleştirebilir mi?
Evet, eğer bir yöntemi private olarak tanımlarsanız, bu yalnızca extension içinde ve tanımlandığı dosyada (eğer fileprivate kullanılıyorsa) görünür olacaktır.
extension Int { private func isEvenInternal() -> Bool { return self % 2 == 0 } func publicCheckEven() -> Bool { return isEvenInternal() } }
** Olumsuz Durum
Büyük bir projede, String'e, e-posta doğrulamasından JSON ayrıştırmaya kadar her şey için extension üzerinden yöntemler ekleniyor. Bir yıl sonra kimse nereden neyin geldiğini anlayamıyor: yöntem isimleri örtüşüyor, biri eski bir işlevden habersiz yeni bir işlev ekliyor ve bağımlılıkların davranışını bozuyor.
Artılar:
Eksiler:
** Olumlu Durum
Ekip, mantıksal gruplar için extensions kullanıyor: doğrulama için ayrı bir extension, formatlama için ayrı bir extension, içeride özel yardımcılar ile. Tüm yöntemler belgelenmiş, yeni yöntemlerin kullanımı tartışılmış, code review yapılmış.
Artılar:
Eksiler: