Swift Dictionary Kullanımı

Merhaba arkadaşlar ,
mobilhanem.com sitemiz için anlattığımız/yayınladığımız Swift Dersleri serimize bu yazımızda Swift Dictionary ile devam edeceğiz. Bir önceki yazımızda Swift Sets konusundan bahsetmiştik. Bu derse başlamadan önce xcode’u kurmak ve playground  üzerinde swift kodu yazabilmek için bu dersimizi okumanızı tavsiye ederim.

Swift Dictionary Nedir ?

Dictionary ‘ler bizim collection type ‘larımızdan biridir. Set ve Array ‘lerin aksine Dictionary ‘lerde iki farklı değer tutulur. Bu değerlerden biri Key diğeri ise Value ‘dur. Her değerin bir Key ‘i olduğu gibi her Value ‘nun da bir Key ‘i vardır. Yani Dictionary ‘nin içerisinde ki her kayıt hem Key hem de Value içermektedir . Dictionary içerisinde bu kayıtlar , Array ‘in aksine belirli bir sıraları yoktur tıp kı Set gibi.

Swift Boş Dictionary Oluşturma

Örneğin uygulamamızda kayıtlı olan kişilerin yaşlarını ve isimlerini tutmak istiyoruz o zaman bir dictionary kullanmak bizim işimize gelecektir. Buna uygun boş Dictionary ‘i aşağıdaki gibi oluşturabiliriz,

var yasVeIsim = [Int: String]()

Kullanıcımızın yaşı bir sayı olacağı için int , isim ise string olarak belirttik. Burada yaş değeri bizim key ‘imiz , isim değerimiz ise value ‘muz olmuş oldu. Bunların sırasını tabikide değiştirebiliriz . Yaş değerimizi value , isim değerimizi ise key olarak tanımlayalım ,

var isimVeYas = [String: Int]()

İsim değerimiz Key , yaş değerimiz ise Value oldu.

Swift Dictionary Kayıt Ekleme

Yukarıda oluşturduğumuz yasVeIsim değişkenimize bir kayıt ekleyelim . Yaş değeri olarak 24 , isim değeri olarakta “Taha” değerini ekleyelim ,

yasVeIsim[24] = "Taha"

Key değerimizi yani 24 ‘ü yazıp , 24 keyinin value ‘suna “Taha” değerini atamış olduk.

Swift Dictionary Boş Mu ? Dolu Mu ?

Evet yine geldik isEmpty keyword ‘müze şimdiye kadar bu kontrole baya bi aşina olmuşuzdur umarım 🙂 Çünkü burada farklı bir işlem yapmayacağım . Sadece kodumuzu yazıp geçelim , aşina olmayan arkadaşlar için buraya tıklayarak isEmpty ‘nin ne olduğunu nasıl kullandığımızı okuyabilirler. isEmpty ‘nin Complexty ‘si O(1) ‘dir

if yasVeIsim.isEmpty{
    print("yasVeIsim Boş")
}else {
    print("yasVeIsim Dolu")
}

Swift Dictionary ‘e İlk Değer Ataması Yaparak Oluşturma

Dictionary ‘i oluştururkende dictionary içerisine kayıt ekleyebiliriz. Eklediğimiz bu kayıtlar oluşturduğumuz dictionary ‘nin türünüde belirlemektedir.

var ulkeVeBaskentler = ["Türkiye":"Ankara","Almanya":"Berlin","İsviçre":"Bern"]

Evet ulkeVeBaskentler değişkenimizi oluşturduk. Oluşturduktan sonra türüne baktığımızda (alt tuşuna basıp değişkenin üzerine tıkladığımızda) aşağıdaki gibi görebilmekteyiz.

var ulkeVeBaskentler: [String : String]

Yukarıda ki şekilde türünü otomatik olarak algılayıp kendi belirlediğini görmüş oluyoruz. Bu değişkenimizde 3 adet Key değerimiz vardır ve bu key değerlerine karşılık gelen 3 adette value değerimiz vardır.

Swift Dictionary İçerisinde ki Bütün Kayıtları Ekrana Bastırma

Dictionary ‘miz içerisindeki kayıtları key ve value ‘larını ayrı ayrı güzel bir şekilde erişip ekrana bastırma işlemini array ‘lerde yaptığımız gibi yapabilmekteyiz ,

for (ulke, baskent) in ulkeVeBaskentler {
    print("\(ulke): \(baskent)")
}

Yukarıda ulkeVeBaskentler değişkenimiz içerisindeki key değerine karşılık gelecek olan ismimiz ulke , value değerine karşılık gelecek olan ismimiz ise baskent olduğunu belirttik ve ardından ekrana bastıracağımız formatta yazıp string içerisinde ulke ve baskent değişkenlerimizi içerisine ekledik. Burada ulkeVeBaskentler dictionary ‘imizin içerisindeki bütün kayıtların key değerine ulke  , her value değerine ise baskent demiş olduk.

Yukarıda ulkeVeBaskentler değişkenimizin içerisinde dolanmıştık . Örneğin sadece ülkeleri yani key ‘leri ekrana bastırmak isteyelim bunun içinde ulkeVeBaskentler içerisinde değil de ulkeVeBaskentler ‘in key ‘lerinin içerisinde dolanmamız lazım . Bunun dışında bütün işlemler yukarıdakinin aynısı olacaktır.

for ulke in ulkeVeBaskentler.keys {
    print("Ülkeler : \(ulke)")
}

ulkeVeBaskentler.keys diyerek ulkeVeBaskentler ‘in key ‘lerinin içerisinde dolanacağımızı belirtmiş olduk ve her kaydın key değerinede ulke diyeceğimizi belirttik ardından istediğimiz şekilde bütün keylerimizi ekrana dilediğimiz formatta bastırmış olduk.  ulkeVeBaskentler.keys diyerek key ‘lere ulaşma işleminin Complexty ‘si O(1) ‘dir.

Key ‘lerin üzerinde dolanabildiğimiz gibi value ‘ların üzerindede dolanabilmekteyiz. Şimdide Bütün value ‘ları ekrana bastıralım ve sadece value ‘ların üzerinde dolanarak ,

for baskent in ulkeVeBaskentler.values {
    print("Başkentler : \(baskent)")
}

Key ‘lerin üzerinde dolanmaktan tek farkı burada ulkeVeBaskentler.values diyerek değişkenimizin value ‘ları üzerinde dolanacağımızı belirtmemizdir.

Swift Dictionary ‘i  Array ‘e  Atamak

Elimizde hali hazırda bulunan dictionary ‘imizi bir array ‘e atayabilmekteyiz. Bu işlemi yaparken iki farklı array ‘e atamak , duruma göre mantıklı olabilir ve bu iki array ‘i paralel array gibi düşünüp array ‘ler üzerinde işlemlerimizi yapabiliriz.

let Baskentler = [String](ulkeVeBaskentler.keys)
let Ulkeler = [String](ulkeVeBaskentler.values)

Bu şekilde Baskentler ve Ulkeler isminde iki farklı array oluşturduk ve bu dizilerin türlerinin string olacağını belirttikten sonra ulkeVeBaskentler ‘in keys ve values değerlerini iki farklı dizinin içerisine atadık. Bu işlemden sonra Baskentler dizisinin içerisinde ulkeVeBaskentler ‘in keyleri yani “Türkiye”,”Almanya”,”İsviçre” değerleri , Ulkeler dizisinin içerisinde ulkeVeBaskentler ‘in value ‘ları yani  “Ankara”,”Berlin”,”Bern” değerleri bulunacaktır.

Swift Dictionary ‘nin Kayıt Sayısını Bulma

Dictionary ‘imizin içerisinde kaç adet kayıt bulunduğunu .count keyword ‘ümüz ile görebilmekteyiz. Bu işlemin Complexity ‘si O(1) dir ve en iyi Complexity değerine sabittir. Eleman sayısına veya başka bir değere bağlı kalmaksızın her zaman O(1) complexity ile çalışır.

ulkeVeBaskentler.count

Yukarıdaki satır bize 3 değerini döndürür.

Swift Dictionary İçerisinde ki Kayıtları Update Etme (Değiştirme)

Dictionary ‘lerimiz içerisindeki kayıtların value ‘larını key değerini vererek update edebiliriz.

ulkeVeBaskentler["İsviçre"] = "Basel"

Value değerini değiştirmek istediğimiz kaydın key değerini vererek karşısına istediğimiz değeri vererek kaydımızı update edebiliriz. Bu işlemden sonra Key -> İsviçre  , Value -> Basel şeklinde olacaktır.

Eğer değeri değiştirirken eski değeri görmek istersek şöyle bir yol izlememiz gerekmektedir ,

if let eskiDeger = ulkeVeBaskentler.updateValue("Bern", forKey: "İsviçre") {
    print("Eski Değer -> \(eskiDeger)")
}

Yukarıdaki şekilde değiştirdiğimiz değeri yani eski değeri görebilmekteyiz. Burada if let kullanmamızın amacı ise daha güvenli olmasıdır ve eğer key değeri “İsviçre” olan bir kayıt bulamaz ise o bloğa girmez ve programımız hata vermez. Eğer key değeri bulamaz ise eskiDeger değişkenine her hangi bir değer atamamış olacaktır ve bizde olmayan değeri print ile ekrana bastırmaya çalıştığımızdan dolayı (veya her hangi bir şekilde kullanırsak) hata vermesini engelleyecektir.

Swift Dictionary Bütün Elemanları Silme

Dictionary ‘lerimizin içerisindeki bütün kayıtları veya belirli bir kaydı silmek mümkündür. İlk olarak bütün elemanları nasıl silebileceğimizi yani içerisinde kayıt veya kayıtlar bulunduran dictionary ‘imizi , boş bir dictionary ‘e nasıl dönüştürebileceğimizi görelim ,

yasVeIsim.removeAll()

Daha önceden oluşturduğumuz yasVeIsim değişkenimizi .removeAll keyword ‘ü ile içerisindeki bütün kayıtları silebiliriz. Bu keyword ‘ü daha önce set ve array ‘lerde de aynı işlemi yapmak için kullanmıştık. Bir başka yöntem ise boş bir dictionary ‘i kendi dictionary ‘imize (elemanlarını silmek istediğimiz) atayarakta gerçekleştirebiliriz,

ulkeVeBaskentler = [:]

Yine daha önceden oluşturduğumuz ulkeVeBaskentler değişkenimize , boş bir dictionary ‘i atayarak işlemimiz gerçekleştirdik ve bu satır işlendikten sonra ulkeVeBaskentler değişkenimiz boş bir dictionary olacaktır. Boş bir dictionary ‘i şu şekilde gösterilir -> [:] . Key ve Value kısımları boş olarak bırakılır ve araya key ve value değerlerini ayıran : işareti konur.

Swift Dictionary Belirli Bir Key İle Kaydı Silme

Eğer key değerini bildiğimiz bir kaydı silmek istiyorsak key değerini verip ardından nil ‘ e eşitleyebiliriz.

var phDegerleri = ["Sırma":7.6, "Erikli":7.7, "Hayat":7.8]

phDegerleri isimli dictionary ‘imizi oluşturduk ve içerisine 3 adet kayıt ekledik . Şimdi key değeri “Sırma” olan kaydı dictionary ‘mizden çıkartalım .

phDegerleri["Sırma"] = nil

Yukarıdaki gibi key değerimizi verdikten sonra o kayda nil değerini atayarak dictionary ‘mizden çıkartmış olduk.

Bir başka yöntem olarak .removeValue fonksiyonumuzu kullanabiliriz. İnput olarak dictionary ‘nin key değerini alır. Complexity ‘si 0(n) dir.

phDegerleri.removeValue(forKey: "Erikli")

Dictionary ‘tizden çıkartmak istediğimiz kaydın key değerini input olarak verdikten sonra o kaydı dictionary ‘mizden çıkarmış oluyoruz.

Swift Dictionary İçerisinde Key İle Value Değerini Güvenli Bir Şekilde Bulma

Güvenliden kastım uygulamamızın hata vermemesi beklenmedik bir durumla karşılaşmamızdır. Her zaman buna uygun olarak kodlarımızı yazmalıyız. Daha öncedende if let kullanmıştık şimdi de kullanacağız .

if let deger = phDegerleri["Hayat"] {
    print("Sırma var ve key değeri -> \(deger)")
}

Yukarıda , eğer phDegerleri değişkenimizde key değeri “Hayat” olan bir kayıt var ise o kaydın value değerini deger isimli değişkene at ve aşağıdaki print komutunu çalıştır demiş olduk. Buraya istersek else bloğu da ekleye biliriz. if let burada bizi şu durumdan kurtarmaktadır , eğer phDegerleri içerisinde key değeri “Hayat” olmayan bir kayıt olsaydı uygulamız hata vericekti 🙂

Umarım şu ana kadar her şey açıklayıcı gidiyordur. Kafanıza takılan soruları yorum kısmından sorabilirsiniz. Derste yazdığım kodları aşağıdaki linkten indirebilirsiniz.

print(“Be a yardstick of quality. Some people aren’t used to an environment where excellence is expected“)

print(“Steve Jobs“)

6

Taha Eren Buyruk

Başkent Üniversitesi Bilgisayar Mühendisliği.

1 Yorum

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?