Swift Mülakatlarına Hazırlanmak-1

Damla Çim
3 min readOct 20, 2022

--

Herkese selamlar! Bugün girdiğim mülakatlarda karşılaştığım konulardan bahsedeceğim. Bir süredir mülakatlara giriyorum ve bu konuda tecrübe edinmeye çalışıyorum. İlk girdiğim mülakatı düşündüğümde (gerçekten inanılmaz kötüydü) belirli bir yol katettiğimi görüyorum. En azından artık karşıma nasıl bir şey geleceği ve hangi konular üzerindeki bilgimin sınanacağını az çok kestirmiş durumdayım. Bu yazıda da biraz bunlar üzerine konuşacağız.

Protocols

Tek başına ele alabileceğimiz gibi OOP altında da bahsedebileceğimiz bir konu. Kısaca ne olduğuna değinirsek; protocol’ler sınıflar ya da diğer türler tarafından benimsenebilecek yöntem ya da özelliklerin bir planıdır. Bir protocol birden fazla protocol’ü inherit edebilir ve protocol’lere extension yazabiliriz.

Alan hesabı yaptığımız bir protocol’ümüz olduğunu varsayalım. Bu protocol bize gettable bir property ve bir yöntem verir.

Area sınıfını AreaProtocol’e uygun hale getirdik. Bu şu anlama geliyor, artık protocol’ün bize sağladığı propertyleri ve yöntemleri sınıf içinde kullanabiliriz.

Area sınıfından oluşturacağımız bir obje ile de sonuca erişebiliriz.

  • Multiple Protocols

Şimdi ise multiple protocol’lere göz atalım.

Örnekte görüldüğü üzere bir sınıf birden fazla protocol’e uygun hale getirilebilir.

  • Protocol Inheritance

Örnekte HouseType protocol’ünün House protocol’ünü inherit ettiğini görürüz. Apartment sınıfı sadece HouseType protocol’üne uygundur fakat HouseType House’ı inherit ettiği için sınıfta her iki protocol’ün de özelliklerini uygulamamız gerekir. Bunların yanı sıra bir protocol birden fazla protocol’ü de inherit edebilir.

  • Protocol Extensions

Yukarıda da bahsettiğimiz gibi protocol’leri extend edebiliriz.

Yukarıdaki örnekte name propertysini aldığımız bir protocol tanımladık ve onu extend ederek uppercase fonksiyonunu ekledik.

Output:

lowercase name: damlauppercase name: DAMLA

Generics

Farklı veri türleriyle kullanılabilen işlev ya da sınıflar oluşturmamıza olanak tanır. Kodun yeniden kullanılabilmesini sağlar.

  • Generic functions

Output:

Data Passed: swiftData Passed: 5

<T> tip parametresiyle genel bir fonksiyon yarattık ve bu fonksiyona hangi veri tipini iletirsek o şekilde çalışacaktır.

  • Generic class

Output:

Generic class returns: trueGeneric class returns: swift

Örnekte TypeInfo adında generic bir sınıf oluşturduk. Bu sınıf, herhangi bir veri türüyle çalışmak için kullanılabilir. Biz örnekte bool ve string veri tipiyle çalıştık.

Closures

İşlev adı olmayan özel fonksiyonlardır. Closure’lar herhangi bir sabite ve değişkene yapılan referansları yakalayabilir ya da saklayabilir.

Swift Closures Document
  • Closure parametre almayabilir ve bir şey return etmeyebilir.
  • Closure parametre alabilir ve geriye bir parametre return edebilir.
  • Trailing Closure

Bir fonksiyon son parametresi olarak bir closure alıyorsa parametrenin adını belirtmeden closure’ı fonksiyon gövdesi olarak kullanabiliriz.

Output:

area of the square: 16
  • Non-escaping Closures

Bir closure non-escaping parametresiyle işaretlenirse bu closure’ın fonksiyonun gövdesinden kaçamayacağı anlamına gelir. Closure’ları fonksiyon argümanı olarak kullandığımızda closure, fonksiyonun gövdesiyle birlikte yürütülür ve compiler’ı return eder. Execution bittiğinde closure’ın bellekteki varlığı son bulur.

Closure parametreleri default olarak non-escaping’dir. Closure execution’dan kaçmak için closure’ı escaping olarak işaretlememiz gerekir.

  • Escaping Closures

Bir closure’ı escaping olarak işaretlemek closure içinde self kullanmamız gerektiği anlamına gelir. Closure fonksiyona argüman olarak iletilir ve fonksiyon return ettikten sonra çağırılır.

Bu yazıda bahsedeceklerim bu kadar. Devamında ise diğer önemli noktaları konuşuyor olacağız. Sonraki yazıda görüşmek üzere.

Referanslar:

--

--

Damla Çim

iOS developer at Garanti BBVA Technology | computer engineer