Collection Type

Swift içerisinde Array, Set ve Dictionary olmak üzere 3 temel collection type mevcuttur. Array içerisinde tekrarlı veri saklayabilen düzenli bir yapıdır. Set ise farklı olarak hem düzensizdir hemde varolan bir nesne tekrar eklenemez. Dictionary ise key-value ilişkisi şeklinde veri saklayabilen bir yapıdır. Yapısal olarak Objective-C’deki NSArray, NSSet ve NSDictionary ile aynı yapıdadır.





var setString = Set()
setString.insert("Elma")
setString.insert("Armut")
setString.insert("Kavun")
setString.insert("Zeytin")
setString.insert("Zeytin")
setString.insert("Muz")

for temp in setString
{
println(temp)
}

Yukarıdaki kod bloğu size aşağıdaki şekilde bir çıktı üretecektir. Dikkat ederseniz veriler hem yukarıdaki resimde de görüleceği üzere hem düzensiz olarak eklenmiştir hemde  Zeytin string’i 2 kez eklenmesine rağmen tek bir kayıt bulunmaktadır. Array’de bu yapıdan farklı olarak hem eklediğiniz sırada bir çıktı alacaktınız hemde Zeytin string’i vb. istenildiği kadar eklenebilecekti.

Kavun
Armut
Elma
Zeytin
Muz

Objective-C’de alışık olduğunuz Mutable yapıları (NSArray-NSMutableArray vb.) swift içerisinde var ve let ifadeleri ile sağlanmaktadır. let ile tanımlayacağınız değişkenler immutable olarak tanımlanacaktır, yani üzerinde veri ekleme, çıkarma gibi işlemler gerçekleştiremeyeceksiniz, boyutu ve içeriği sabit olacaktır. var ifadesi kullanırsanız mutable olarak tanımlanacaktır ve üzerinde istediğiniz şekilde düzenleme yapmanız mümkün olacaktır.

Array


İçerisinde tekrarlı olarak aynı verilerin eklenebileceği yapıdır. Swift’te Array’ler generic yapıdadır. Array’leri tanımlarken içerisinde tutacağınız veri tiplerini belirtmek zorundasınız. Array<VeriTipi> şeklinde tanımlama yapabileceğiniz gibi  kısaca [VeriTipi] şeklinde de tanımlayabilirsiniz. Aşağıda Int ve String veri tipleri için tanımlanmış ve append methodu ile 1’er eleman eklenmiş Array’ler mevcuttur.

var items = [Int]() // Array()
items.append(3)

var strArray = [String]() //Array()
strArray.append("elma")


Aynı tipte 2 array’i + operator’ü ile birleştirebilirsiniz.

var arr1 = ["Ali"]
var arr2 = ["Veli"]
var arr3 = arr1 + arr2

if arr3.isEmpty // Array'in boş olup olmadığı kontrolü
{
println ("\(arr3.count)") // Array içerisindeki item sayısı
println("\(arr3[0])") // Array içerisindeki 0. item
}


var arr =  [“Elma”,”Armut”,”Erik”,”Karpuz”,”Kavun”,”Kiraz”] arrayi içerisinden Armut, Erik,Karpuz, Kavun’u çıkarıp yerlerine Vişne ve Çilek eklemek için;
arr[1…4] = [“Vişne”,”Çilek”]

Array içerisinde istediğiniz index’e (_:atIndex:) methodu ile yeni bir item ekleyebilirsiniz.
arr.insert(“Elma”,atIndex:3)

removeAtIndex methodu ile array içerisinde herhangi bir indexteki değeri silebilirsiniz. Bu method size silinen item’ı return etmektedir.
let item = arr.removeAtIndex(0) // item değişkenine silinen 0. index’teki değer atanacaktır.
let item = arr.removeLast() // Array içerisindeki son item’ı silecektir.

Array içerisinde aşağıdaki şekilde oluşturacağınız bir döngü ile gezinebilirsiniz.
for item in arr {
      println(item)
}

Array<String> tanımında veya Array<Int> tanımında nesnenin sadece String veya sadece Int değerler alabileceğini belirtebilirsiniz. Şayet array içerisinde farklı veri tiplerini tutmanız gerekiyorsa Any ve AnyObject tiplerini kullanabilirsiniz. AnyObject referans tipli nesneleri ifade etmektedir. Any farklı olarak değer tipli(Int,Bool) değişkenlerinde eklenmesine imkan verecektir.
var genericArray : Array<Any> = [“Ali”,true,10]

 Set

Array’den farklı olarak şayet eklediğiniz verilerin tekil olarak tutulmasını istiyorsanız ve sıralama sizin için önemli değilse Set kullanabilirsiniz. Objective-C’deki NSSet ile yapısal olarak aynıdır. Set’lerde Array’ler gibi generic yapıdadır. Bir Set aşağıdaki şekilde tanımlanabiliri.

var liste = Set<String>()
liste.insert(“Elma”) //  Set içerisinde string tipli bir değişken ekledik

liste = []  // liste Set’i şuan boşaltıldı fakat tipi halen Set<String>
var liste:Set = [“Ali”,”Veli”] // Swift’in Type Inference özelliği sebebiyle siz Set’in tipini belirtmesenizde bu şeklide bir kullanımla yapılan atamaya göre Set’in tipi belirlenecektir.
if liste.isEmpty{}  // Bir set’in dolu olup olmadığını isEmpty property’siyle elde edebilirsiniz.

remove(_:) methodu kullanarak istenilen bir item silinebilir. Tüm item’ları silmek için removeAll() methodu kullanılabilir.
liste.remove(“Ali”) veya liste.removeAll()

Set içerisinde bir değerin olup olmadığını contains(_:) methoduyla sorgulayabilirsiniz.
if liste.contains(“Ali”){
}

2 Set nesnesi üzerinde aşağıdaki şekilde gösterilen işlemleri gerçekleştirebilirsiniz. Nesnelerin birbirleri ile karşılaştırılması mantığında ortak elemanları, birleşimi, birinde olup diğerinde olmayanlar şeklinde filtrelemeler yapabilirsiniz.



Union

let sayilar:Set =  [1,2,3,4,5,6,7,8,9,10]
let tekSayilar:Set = [0,2,4,6,8]
let sayilar1 = sayilar.union(tekSayilar) // 2 Set’in birleştirilmesini sağlar. Bu işlem Set([0, 10, 2, 4, 9, 5, 6, 7, 3, 1, 8]) şeklinde bir sonuç dönecektir. Çünkü başlangıçta da belirttiğim gibi Set’ler düzensiz yapılardır. sort methodunu kullanarak sıralama yapabilirsiniz.
let sayilar1 = sorted(sayilar.union(tekSayilar)) // Sıralama sonrası sonuç : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Intersect

sorted(sayilar.intersect(tekSayilar) // Her ikisinde de ortak olanlar : [2, 4, 6, 8]


Subtract

sorted(sayilar.subtract(tekSayilar)) // Sayilarda olup TekSayilarda olmayanlar [1, 3, 5, 7, 9, 10]

ExclusiveOr

sorted(sayilar.exclusiveOr(tekSayilar)) //Her ikisinde de bulunanlar dışında kalanlar [0, 1, 3, 5, 7, 9, 10]


Dictionary


Key-Value ilişkisi şeklinde özetleyebileceğimiz, tekil bir key için bir değer barındıran yapılardır. Objective-C’deki NSDictionary ile aynı yapıdadır.

Dictionary<Key Tip,Value Tip> şeklinde tanımlanabilir, görüleceği üzere generic bir yapıdır, Key ve value’ların tiplerini belirtmek gerekmektedir. [Key:Value] şeklinde de bir dictionary tanımı yapabilirsiniz.

var dic =  [Int:String]() // Key’in tipi Int, Value’nun tipi String olacak şekilde bir Dictionary tanımlamış olduk.
dic[10] = “Elma” // Dictionary içerisine yeni bir item eklemiş olduk. 10 key’ine karşılık Elma değerini ekledik.
dic = [:] // Tipi belli olan  dictionary’lerin içeriği [:] ataması ile sıfırlanabilir.

Array tanımıyla benzer şekilde dictionary’leri de aşağıdaki şekilde tanımlayabilirsiniz.
[Key 1:Value 1 , Key 2:Value 2 , Key 3:Value 3 ] örneğin;
var dic: [String:String] = [“Türkiye”:”Ankara” , “Almanya”:”Berlin” , “Azerbaycan”:”Bakü”]

Dictionary içerisinde for döngüsüyle aşağıdaki şekilde işlem yapabilirsiniz.
for (key,value) in dic{
 println(“\(value)’un plakası \(key)”)
}
// Erzurum’un plakası 25
// İstanbul’un plakası 34

let removeItem = dic.removeValueForKey(“25”)
removeValueForKey methodu ile dictionary içerisinde istediğiniz bir key için kaydı silebilirsiniz. Bu metodda size silinen ilgili değeri return edecektir.

Dictionary içerisindeki tüm key ve value listesini keys ve values property’leri ile çekmeniz mümkün.
for key in dic.keys{

println(“\(key)”)
}
for key in dic.values{
    println(“\(key)”)
}


Kaynak: http://sefaaycicek.com/