Swift 4 —Bölüm 4: Koleksiyon Tipleri

Swift birbiriyle ilişkili dataları bir arada tutmamız için bize 3 adet collection tipi sunar. Bunlar Array, Set ve Dictionarydir. Array dataları belirli bir sırada tutmamıza olanak verir. Set dataları benzersiz bir şekilde herhangi bir sıra gözetmeden tutmamıza yardımcı olur. Dictionary de Setler gibi herhangi bir sıra gözetmez ancak datalar anahtar-değer şeklinde saklanır.

Arrays

Bir array içerisinde aynı tipteki dataları sıralı olarak tutabilirsin. Ayrıca aynı değeri birden fazla kez ekleyebilirsin.

Array Tanımlama

Swift’de 2 tarzda array tanımlayabilirsin. Ancak ben sadece bir tanesini göstereceğim. Hem daha pratik, hem de Apple da bunu tercih etmiş. 😉

Şimdi boş olan ve Int tipinde veriler tutan bir array tanımı yapalım ve örneklerimize hızlı bir giriş yapmış olalım.

var diziInt = [Int]()
print("diziInt'in eleman sayısı= \(diziInt.count)")

Arrayimizi tanımladık şimdi ise bir eleman ekleyelim. Ancak unutma elemanımız Int tipinde olmalı.

diziInt.append(1923)

Bir arrayi illaki boş yaratıp sonradan değer eklemek zorunda değilsin. İlk tanımladığımız anda da değerler atayabilirsin. İşte o tanımlandığı anda değerleri atanan dizi. 😅

var bakkalList: [String] = ["1 Kola","2 Paket Cips","3 Çikolata"]

Yukarıdaki gayet sağlıksız bakkalList🤢 arrayi String tipinde ilk değerleriyle birlikte tanımlanmıştır. Burada bir şeye dikkatini çekecek olursam, dizi “var” ile tanımlandı. Bunun sebebi diziye daha sonra ekleme yapabilmemizi sağlamaktır. Yani bir arrayin değiştirilebilir olmasını istiyorsan “var”, değiştirilemez olmasını istiyorsan “let” ile tanımlamalısın.

Array Elemanlarına Ulaşma ve Değişiklik Yapma

Yukarıda bahsettiğim gibi arrayimizi “var” ile tanımladık ve bu tanımı yapmamızın sebebi üzerinde değişiklik yapabilmeyi istiyor oluşumuz. O halde başlayalım.

Arraylerin isEmpty özelliğini kullanarak bir arrayin boş olup olmadığını kontrol edebilirsin.

if bakkalList.isEmpty{
print("Bakkal listesi boş")
}else{
print("Bakkal listesi dolu")
}

Eğer bir arraya ekleme yapmak istiyorsanız append metodunun haricinde “+=” operatörü ile de ekleyebilirsiniz. Bakkal listemize birkaç tane de sağlıklı gıda ekleyelim 😇

bakkalList += ["2 Ekmek","1 Kutu Yumurta","1 Yoğurt"]

Şimdi eklediğimiz elemanlara nasıl ulaşacağımıza bakalım. Bu örneğimizde ilk elemanımızı bir değişkene atayalım.

var firstItem = bakkalList[0]
print(firstItem)

Bakkal listemiz hazır ancak 3 çikolatanın bizim için çok olduğuna karar verdik ve adedini 1 yapmaya karar verdik. Peki nasıl yapacağız? Evet aynen öyle o zaman dediğini yazalım hemen 😏

bakkalList[2] = "1 Çikolata"

An itibariyle şekeri bir miktar azalttık 🍩

Şu ana kadar yeni bir eleman eklediğimizde hep arrayin sonuna eklendi. Pekii biz istediğimiz bir indise ekleme yapmak istersek neler olacak? Çok kolay; yardımımıza insert(_:at:) metodu yetişiyor. Mesela 1 indexine meyve suyu eklemesi yapalım.

bakkalList.insert("1 Meyve Suyu", at: 1)

Belirli bir indexe ekleme yapabildiğimiz gibi aynı şekilde belirli bir indexten de veri silebiliriz. Bu işlemi de remove(at:) metodu ile yapacağız. Meyve suyunu eklediğimize göre kolayı silelim o zaman 😌

bakkalList.remove(at: 0)

remove(at:) metodu silinen elemanı geriye döndürür. Ancak bunu görmezden gelebilirsin. Yok ben illa görücem👻 dersen de kodumuza şu eklemeyi yapabiliriz.

let removedValue =  bakkalList.remove(at: 0)
print(removedValue)

Array Elemanlarını Ekrana Yazdırma

Artık listemiz hazır ve bunu ekrana yazdırma istiyoruz. Bunu tüm indexleri sırasıyla yazarak yapabiliriz ama elbette yapmayacağız. 🤖 Bunun için döngü kullanmak oldukça akıllıca olacaktır.

for item in bakkalList{
print(item)
}

Eğer arrayda bulunan itemlerle birlikte indexlerini de ulaşmak istersen enumerated() metodunu kullanabilirsin. Bu metod geriye bir tuple olarak index ve item değerini döndürür.

for (index,item) in bakkalList.enumerated(){
print("Item \(index+1): \(item)")
}

Sets

Arraylerden farklı olarak Setlerde veriler herhangi bir sırada tutulmaz. Ayrıca Setlerde tekrarlı veriler bulunmaz. Yani her bir veriden sadece bir tane vardır.

Set Tanımlama

Swift’de boş bir Set tanımlamak oldukça basittir. Ancak Array tanımlamak kadar basit değil 🤗 Şimdi ilk Setimizi tanımlayalım.

var mancoSet = Set<String>()

İşte bu kadar. Eğer ilk değerli bir Set tanımlamak istersen o da oldukça kolay hemen onunla da ilgili bir örnek yapalım.

var mancoSet: Set<String> = ["Arkadaşım Eşşek","Gibi Gibi","Dönence"]

Yukarıdaki örneği hissettiğime göre çok beğenmedin. Sanki biraz daha kolay bir yazım bekliyor gibisin. Hmm..🤔 O zaman kısaltalım.

var mancoSet: Set = ["Arkadaşım Eşşek","Gibi Gibi","Dönence"]

Sahip olduğumuz Sete bir eleman eklemek istiyorsak insert(_:) metodu bize bütün iyi niyetiyle yardımcı olacaktır.

mancoSet.insert("Domates Biber Patlıcan")

Peki diyelim Setimizden bir datayı silmek istedik o zaman da remove(_:) metodu bize yardımcı olacaktır. Bu metod böyle bir data varsa geriye sildiğin datayı döndürür. Eğer data yoksa da nil döndürür. Bu Setten hiçbir şarkıyı silmek istemiyorum elbette ancak bir tanesini seçelim 😔

if let removedData = mancoSet.remove("Gibi Gibi"){
print("\(removedData) silindi")
}else{
print("Böyle bir şarkı yok")
}

Yukarıdaki örnekte “if let removed” ifadesinin sebebi remove(_:) metodunun geriye nil döndürme ihtimalinin olmasındandır.

Setinin bir değeri içerip içermediğini merak ettiğin durumlarda contains(_:) metodu bize yardımcı olacaktır.

if mancoSet.contains("Gibi Gibi"){
print("mancoSeti Gibi Gibi şarkısını içeriyor")
}else{
print("mancoSeti Gibi Gibi şarkısını içermiyor")
}

Temel Set İşlemleri

Diyelim elinde isimleri a ve b olmak üzere iki adet Set var. Bu setleri karşılaştırmak istersen aşağıdaki metodları kullanabilirsin.

a ve b setlerinin kesişimini bulmak için:

a.intersection(b)

a ve b setlerini birleştirmek için:

a.union(b)

a ve b setlerinin kesişimlerinin dışında kalan elemanları bulmak için:

a.symmetricDifference(b)

Sadece a Setinde olan elemanları bulmak için:

a.subtracting(b)

Dictionaries

Array ve Setlerden farklı olarak Dictionariesler verileri key-value çifti halinde tutar. Ayrıca bu veriler belirli bir sırada tutulmaz.

Dictionary Tanımlama

Dictionary tanımlamak, Array tanımlamaya çok benzer. Şimdi boş bir dictionary tanımlayalım.

var licensePlate = [Int: String]()

Yukarıdaki tanımlamaya göre elimizde key=Int ve value=String olan bir Dictionary var. Zaman kaybetmeden içerisine bir değer ekleyelim.

licensePlate[59]="Tekirdağ"

Yukarıdaki ifade aklını karıştırmasın. Burada 59.sıraya bir ekleme yapmadık sadece key olarak 59 yazdığımızda Tekirdağ değerine ulaşmak istediğimizi belirttik.

Peki boş değil de ilk değer veya değerlerle birlikte bir Dictionary tanımlamak istersek ne yapmamız gerekli sorusu akıllara gelirse cevabı işte hemen aşağıda.

var countryCodes: [String:String]=["TR":"Türkiye","AZ":"Azerbaycan"]

Yukarıdaki tanımlamayı bir miktar kısaltalım dediğini duyar gibi oldum. O zaman hemen yapalım ki boşuna bir zaman kaybı yaşamamış olalım. İlk değer veya değerleri tanımlanmış dictionaryde key-value çiftini belirtmene gerek yok çünkü Swift bunun çıkarımını yapıyor.😏

var countryCodes=["TR":"Türkiye","AZ":"Azerbaycan"]

Bir dictionaryde kaç tane eleman olduğunu tespit etmek için count özelliğini kullanabilirsin.

print("Eleman sayısı=\(countryCodes.count)")

Ayrıca bir dictionarynin boş olup olmadığını da isEmpty özelliği ile kontrol edebilirsin.

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

Elindeki dictionarynin bir değerini değiştirmek istersen updateValue(_:forKey:) metodunu kullanman gerekiyor. Bu metod eğer değer değiştirildiyse geriye eski değeri döndürür. Eğer böyle bir değer yoksa geriye nil değer döndürür.

if let changedValue=countryCodes.updateValue("TÜRKİYE", forKey: "TR"){
print("\(changedValue) değeri değiştirildi.")
}else{
print("Böyle bir değer yok.")
}

Elindeki dictionaryden bir değer silmek istersen removeValue(forKey:) metodunu kullanmalısın. Bu metod eğer böyle bir değer varsa siler ve silinen değeri geriye döndürür. Böyle bir değer yoksa da nil döndürür.

if let removedValue = countryCodes.removeValue(forKey: "TR"){
print("\(removedValue) değeri silindi.")
}else{
print("Böyle bir değer yok.")
}

SON

Bu bölümün de sonuna geldik. Bu bölümde elimiz ayağımız, canımız ciğerimiz, gözbebeğimiz olan bir konuyu işledik. Umarım faydalı olmuştur.

Yazının son bölümünü yoğunluktan dolayı ancak 1 Ocak 2018'de tamamlayabildim. Bu vesileyle Mutlu Yıllar 🎄

Yeni yıla aynen bu şekilde girdim :D

Yeni yılda birçok hedef belirledim.Umarım seninde hedeflerin vardır ve ikimiz de bunları gerçekleştirebiliriz ❤️

Duygu ve düşüncelerini benimle paylaşmaktan sakın çekinme.Mutlaka paylaş 😇

Diğer bölümde görüşmek üzere kendine iyi bak 👌

Best regards veya Sincerely de olabilir.