Swift - fileprivate ve open Erişim Belirleyicileri Nedir, Ne Yaparlar?

thanks to Reda Lemeden for this image

Merhaba arkadaşlar,

Biliyorsunuz ki, Apple diğer dillerden farklı olarak Swift 3'le birlikte fileprivate ve open erişim belirleyicilerini dile dahil etti.

fileprivate Erişim Sınırlayıcısı nedir?, ne yapar?

fileprivate’i anlatmadan önce private erişim belirleyicisi ne idi hatırlayalım. ☺️

private erişim belirleyicisi, önüne tanımladığımız değişkeni, methodu vb. tamamen scope’da kullanılabilir kılar.

fileprivate erişim belirleyicisinin amacı değişkenin tanımlandığı scope dışında aynı dosya içerisinde tanımlanan bir diğer class(sınıf)/extension(uzantı) tarafından erişilmesidir.

Diyeceksiniz ki public ne güne duruyor, onu kullanırsam zaten aynı dosya içerisinde erişebilirim…

Yanlış, neden mi? Çünkü public size istediğiniz erişim seviyesinin çok daha fazlasını sunuyor. Ancak sizin buna ihtiyacınız yok, tanımladığınız private değişkenin aynı class içerisinde farklı class / extensionlar tarafından kullanılabilir olmasını istiyorsunuz, bunun için fileprivate kullanabilirsiniz. 😎

open Erişim Sınırlayıcısı Nedir, Ne Yapar?

Aynı şekilde burada da open erişim sınırlayıcısını anlatmadan önce public erişim sınırlayıcısı üzerinden ilerlemenin anlatımın yalın ve öz olması açısından önem taşıdığını söylemeden edemeyeceğim. 🤪

public erişim sınırlayıcısı tüm modül tarafında erişilebilir durumdadır, ancak iki modül kullanıldığı durumlarda alt sınıflarda (subclasses) ve scopelarda kısıtlayıcı olabilir ve public erişim sınırlayıcısı ile tanımladığınız değişken ve methodlara erişemeyebilirsiniz.

Bu yüzden iki modül kullanacağınız ve bir modülünüzdeki değişkenlere ve methodlara, bir diğer modülünüzden erişmek istiyorsanız, yapacağınız şey basit: subclass olarak belirlediğiniz class’ın başına open erişim sağlayıcısını dahil edeceksiniz, aynı şekilde override etmek istediğiniz method’a da tanımlamanız yeterli olacaktır.

public ile tanımlanmış bir sınıf, bir diğer modülde alt sınıf (subclass) olamayacağı gibi barındırdığı methodları da override edemez.

open erişim sınırlayıcısına kısacası “more public than public” diyebiliriz.

Okuduğunuz için teşekkür ederim, umarım faydalı bir yazı olmuştur. 😜