Swift: Access Control

Access control elemanları, kod elemanlarınız birbirleri arasındaki erişimi kısıtlamanıza yarar.

Can Balkaya
TurkishKit
3 min readSep 14, 2020

--

Merhaba TurkishKit okuyucuları! 🖖🏻 Bu yazımızda Swift dilindeki “access control” elemanlarının ne işe yaradıklarını ve nasıl kullanıldıklarını öğreneceğiz. Eğer sizler de hazırsanız başlayalım! 🤘

Access Control Nedir?

Bir evin içerisindeki odalarda birbirlerinden farklı eşyaların olduğunu düşünün. Bu evin sahibi odaların içerisindeki ‘bazı’ eşyaların bulunduğu odanın dışında kullanılmamasını ve ‘bazı’ eşyaların da diğer odalarda kullanılabileceğini söylüyor ve hatta bunun için o ‘bazı’ eşyaları odalarında zincirliyor gibi düşünelim. İşte access control elemanlarını da bu zincirleri kilitlemeye ya da kilidi kaldırmaya yarayan anahtarlara benzetebiliriz. 🔑

Access control elemanları özellikle birden fazla kişinin çalıştığı projelerde oldukça işe yarar. Örneğin bir sınıfın içerisinde yazmış olduğunuz bir fonksiyonun başka bir sınıf içerisinde kullanılmasını istemiyorsanız, access control elemanlarını kullanarak bunu sağlayabilirsiniz. Böylece tip güvenliği yüksek kodlar yazmış olursunuz.

Swift dilinde toplamda beş tane access control elemanı (bunlara “erişim düzeyi” de diyebiliriz) bulunmaktadır: private, fileprivate, internal, open ve public. Şimdi bu elemanlara değineceğiz.

Erişim Düzeyleri

private

“private” elemanı sayesinde bir sınıfın içerisinde tanımladığımız bir özelliği (veya fonksiyonu vs.), sınıfın dışında kullanılmaz hale getirebiliriz. Makalenin başında dediğim gibi birden fazla kişinin çalıştığı bir projede yazdığınız bir fonksiyonun diğer sınıflar içerisinde kullanılmamasını istiyorsanız “private” elemanını kullanabilirsiniz.

Bunu daha iyi anlamak için aşağıdaki sınıfa bakalım.

Bu özelliği tanımlandığı sınıfın dışında kullanmak istediğimiz zaman hata alacağızdır. Örnek olarak, aşağıdaki kodu sınıfın dışında yazdığınız zaman hata ile karşılaşırsınız.

fileprivate

“fileprivate” elemanı sayesinde bir dosyanın içerisinde tanımladığımız bir özelliği (veya fonksiyonu vs.), dosyanın dışında kullanılmaz hale getirebiliriz. “private” elemanına ne kadar da benziyor…

Örneğin, bir dosyasının içerisinde az önce tanımladığımız sınıfı tanımlayalım ama bu sefer içindeki “name” özelliği “fileprivate” ile tanımlansın.

Yine aynı dosyanın içerisinde yeni bir sınıf oluşturalım ve bu sınıfın içerisindeki özelliğin değeri direkt “Person” sınıfı üzerinden gelsin.

Göreceğiniz üzere, bu şekilde hiç bir hata almadan “name” değerimizi başka sınıflarda kullanabiliyoruz.

internal

Normalde bir özellik tanımladığınız zaman varsayılan olarak özelliğinizde “internal” elemanı kullanılır. O yüzden, bu eleman size biraz daha aşina gelecektir.

“internal” elemanı ile tanımlanan özellikler (veya fonksiyonlar vs.) bulunduğu “Target” içerisindeki her yerde kullanılabilirdir.

open

“open” elemanı “framework”lerde kullanılan bir elemandır. Buna örnek olarak UIKit “framework”ünü verebiliriz. Bir “UIViewController” elemanının üzerine tıklayıp “Jump to Definition” derseniz oradaki sınıfların, özelliklerin ve metodların genelinin başında “open” elemanı olduğunu görürsünüz.

Belki fark etmişsinizdir, “open” ile tanımlanmış bir metoda veya özelliğe erişebilmek için ilk önce modülün alt sınıfına inmemiz gerekmektedir: Örnek olarak, UIKit’in altından “UIViewController” sınıfına ve oradan da “view” özelliğine erişebilmek verilebilir.

public

“public” elemanı da “open” elemanına çok benzerdir. Aralarındaki en büyük fark, “open” ile tanımladığımız elemanları modülün (örnek: UIKit) dışında -UIViewController elemanını kullandığımız gibi- kullanabilirken, “public” ile tanımladığımız elemanları modül dışında kullanamayışımızdır.

Swift dilindeki bütün access control elemanlarını öğrendik. Umarım bu yazımızdan keyif almışsınızdır! Umarım bir gün bu bilgileri kendi “framework”ünüzü yaparken işinize yarar. Keyifli kodlamalar! 💻

Bizi daha yakından takip etmek istiyorsanız, sosyal medya hesaplarımıza aşağıdan ulaşabilirsiniz!

Twitter | Instagram | Facebook

--

--