Bugünkü dersimizde, Swift programlama dilinin temellerinden biri olan koleksiyonları, yani Array ve Dictionary konseptlerini öğreneceksiniz.
Array, bir koleksiyon tipidir ve kelime anlamıyla sıra veya dizi demektir. Array tipi, sıralı bir listeyi ifade eder. Bir Array’in içerisinde yer alan tüm elemanlar, aynı tipten olmak zorundadır.
Gelin birlikte Array kodunun Swift dilinde nasıl yazıldığına bakalım!
Yeni boş bir Array oluştururken, Array’in içerisinde yer alacak olan elemanların tipini belirtmeniz gereklidir. Boş bir Array yaratmanın, üç farklı yolu vardır:
var isimler: [String] = []
var isimler: Array<String> = []
var isimler: [String]()
Bu örneğimizde, gördüğümüz gibi isimler adında boş bir “String” Array’i oluşturduk.
Eğer içerisinde halihazırda değerler bulunan bir Array oluşturmak istiyorsanız, elemanların tipini belirtme zorunluluğu yoktur (çünkü bu zaten elemanların kendisinden anlaşılabilir):
var isimler = ["Ayşe", "Mehmet", "Can"]
Bunun dışında, yeni Array oluşturmanın bir yolu daha vardır: bu da tekrarlayıcıdır. Diyelim ki, içerisinde 100 tane 1 bulunan yeni bir Array oluşturmak istiyorsunuz. Eğer bunu elle yapmaya çalışırsanız, büyük ihtimalle hata yaparsınız! Bunun yerine Swift dilinin gücünü kullanabilirsiniz.
var ones = [Int](repeating: 1, count: 100)
Elimizde bulunan bir Array’e uygulayabileceğimiz birtakım metodlar vardır. Gelin bunlar neymiş öğrenelim!
Bazen, bir değerin bir Array’in içerisinde bulunup bulunmadığını kontrol etmek isteyebiliriz. Bunun için Swift dilinincontains metodunu kullanabiliriz. Bu metod, değer verilen Array’in içerisinde yer alıyorsa true, bulunmuyorsa ise false döndürür.
if isimler.contains("Mehmet") {
print("Mehmet listede var.")
}
Bu örneğimizde, Mehmet isimler listesinde yer aldığı için “if” bloğunun içinde yer alan “print” komutu çalışacaktır.
Bir Array’in içerisinde yer alan eleman sayısını öğrenmek için, count metodunu kullanabilirsiniz.
let count = isimler.count // 3
Bir Array’in boş olup olmadığını öğrenmek için, isEmpty metodunu kullanabilirsiniz. Bu metod, eğer Array’in içerisinde 0 eleman varsa true , diğer durumlarda ise false döndürür.
if isimler.isEmpty {
print("İsim listesi boş")
}
Bu örneğimizde, isimler listesinin içerisinde 3 eleman bulunduğundan, “if” bloğunun içerisinde “print” komutu çalışmayacaktır.
Bir Array’in içerisinde yer alan elemanlara erişmek için, köşeli parantezler ve elemanların pozisyonları kullanılır. İlk elemana 0 ile erişilir, ikinci elemana 1 ile, ve böyle devam eder.
print(isimler[0]) // Ayşe
Bu kalıbı, aynı zamanda Array’in elemanları değiştirmek için de kullanabiliriz.
isimler[0] = "Zeynep"
// isimler = ["Zeynep", "Mehmet", "Can"]
Tabii ki Array’lere istediğimiz değerler ekleyip çıkartabiliriz. Bir Array’e yeni bir eleman eklemenin en kolay yolu, append metodunu kullanmaktır. Bu metod, yeni elemanı Array’in sonuna ekler.
isimler.append("Erkan")
// isimler = ["Zeynep", "Mehmet", "Can", "Erkan"]
Bir Array’e aynı anda birden fazla eleman eklemek için, “+=” operatörünü kullanabiliriz.
isimler += ["Selin", "Elif"]
// isimler = ["Zeynep", "Mehmet", "Can", "Erkan", "Selin", "Elif"]
Son olarak, eğer yeni elemanları Array’in sonuna değil de, spesifik bir pozisyona (örneğin Array’in en başına) eklemek istiyorsak, insert metodunu kullanabiliriz.
isimler.insert("Ali", at: 0)
// isimler = ["Ali","Zeynep","Mehmet","Can","Erkan","Selin","Elif"]
Benzer şekilde, Array’den bir elemanı çıkartmak için de birden fazla metod vardır. Bunların en basiti, parametre olarak bir pozisyon alan, bu pozisyondaki elemanı çıkartan ve döndüren remove metodudur.
let ali = isimler.remove(at: 0)
// isimler = ["Zeynep","Mehmet","Can","Erkan","Selin","Elif"]
Bunun dışında, Array’in son elemanını çıkartmak ve döndürmek için removeLast metodunu kullanabiliriz.
let elif = isimler.removeLast()
// isimler = ["Zeynep","Mehmet","Can","Erkan","Selin"]
Son olarak, eğer bir Array’in tüm elemanlarını çıkartmak istiyorsak, removeAll metodunu kullanabiliriz.
isimler.removeAll()
// isimler = []
Dictionary, bir koleksiyon tipidir ve kelime anlamıyla sözlük demektir. Nasıl bir sözlükte kelimeler ve bu kelimelerin anlamı listeleniyorsa, bir Swift Dictionary’nin içerisinde anahtarlar (keys) ve bu anahtarlarla ilişkilendirilen değerler (values) vardır. Tıpkı normal bir sözlükteki gibi, anahtarların her biri özgün olmalıdır (ne de olsa sözlükte aynı kelime birden fazla geçmez!). Ayrıca, nasıl sözlükteki kelimeler kolay bulunması için alfabetik sıraya göre organize ediliyorsa, Swift dili de Dictionary tipini anahtarların değerlerinin hızlı bir şekilde bulunması için optimize etmiştir.
Gelin birlikte Dictionary kodunun Swift dilinde nasıl yazıldığına bakalım!
Yeni bir Dictionary oluşturmanın, birkaç farklı yolu vardır. İçerisinde halihazırda anahtarlar ve değerler bulunan bir Dictionary oluşturmak için, aşağıdaki kalıp kullanılır:
var plakalar = ["Adana": 1, "Balıkesir": 10, "İstanbul": 34, "Samsun": 55]
Tabii ki, boş bir Dictionary de oluşturabilirsiniz. Bunu yapmanın üç farklı yolur vardır (ancak hepsi temelde aynı anlama gelmektedir):
var plakalar = [String: Int]()
var plakalar = Dictionary<String, Int>()
var plakalar: [String: Int] = [:]
Boş bir Dictionary oluştururken, anahtar ve değerlerin tipini belirtmemiz gereklidir. Yukarıdaki plaka örneğinde, anahtarlar “String”, değerler ise “Int” tipindendir.
Bir Dictionary’nin içerisinde yer alan değerlere ulaşmak için, köşeli parantezler kullanılır. Eğer verilen anahtar Dictionary’nin içerisinde yer almıyorsa, nil değeri döndürülür.
var istanbul = plakalar["İstanbul"] // 34
var amasya = plakalar["Amasya"] // nil
Bu değerlere erişmeye çalışırken, “if-let” kalıbını kullanmak en doğrusudur. Böylece if bloğunun içerisinde yer alan komutlar, sadece aranılan anahtar gerçekten Dictionary’nin içerisinde yer alıyorsa çalıştırılırlar:
if let istanbul = plakalar["İstanbul"] {
print(istanbul) // 34
}
Bunun dışında, keys ve values özelliklerini kullanarak, bir Dictionary’nin anahtar ve değerlerine ayrı ayrı, liste olarak erişebiliriz.
let sehirler = Array(plakalar.keys) // ["Adana","Balıkesir","İstanbul","Samsun"]
let plakalar = Array(plakalar.values) // [1,10,34,55]
Elbette ki Dictionary’lere istediğimiz gibi yeni anahtar-değer çiftleri ekleyebilir, zaten olan anahtarların değerini değiştirebilir veya bir çifti tamamen çıkartabiliriz.
plakalar["Ankara"] = 6
Yukarıdaki satır ile, “Ankara” anahtarını plakalar Dictionary’mize ekleyip değerini 6 olarak belirleyebiliriz. Bu anahtar henüz Dictionary’de yer almadığından, yeni bir çift eklenecektir. Eğer anahtar zaten Dictionary’nin içinde yer alsaydı, yeni bir çift eklenmek yerine “Ankara” anahtarının değeri 6 olacak şekilde değiştirilirdi.
Eğer bir anahtarın değerini değiştirirken, eski değerine de erişmek istiyorsanız, updateValue metodunu kullanabilirsiniz. Bu metod, anahtarın değerini verilen değere değiştirir ve değiştirilmeden önceki eski değeri döndürür.
plakalar.updateValue(6, forKey: "Anakara")
Bir Dictionary’den bir anahtar-değer çiftini çıkarmak çok kolaydır: Anahtarın değerini nil olarak belirlemeniz yeterlidir!
plakalar["Ankara"] = nil
Eğer anahtar-değer çiftini çıkarmadan önceki son değere erişmek istiyorsanız, updateValue metoduna benzeyen removeValue metodunu kullanabilirsiniz. Bu metod, anahtar-değer çiftini Dictionary’den çıkarır ve çıkarmadan önceki değeri döndürür.
plakalar.removeValue(forKey: "Ankara")