Swift: Değer ve Referans Tipleri

Swift’te tipler iki ana kategoriye ayrılır: değer (value) tipler ve referans (reference) tipler. Değer tipi olarak oluşturulan nesne örnekleri (instances) verinin unique bir kopyasını tutarlar. Swift’te değer tiplere örnek olarak struct,enum ve tuple verilebilir. Referans tipleri olarak oluşturulan nesneler ise verinin ortak bir kopyasını paylaşırlar. Referans tipler genelde class olarak tanımlanırlar. Bu yazımızda referans tipleri ve değer tipleri inceleyeceğiz.

Farkları neler?

Değer tipinin en belirgin farklılığı veriyi kopyalamasıdır.Bu tiplerde nesnelerin oluşturulması,atanmaları veya parametre olarak bir metoda geçirilmeleri verinin bağımsız bir kopyasını oluşturur:

// Değer tipi struct S { var veri: Int = 0 } var a = S() var b = a // a b’ye kopyalanır a.veri = 1 // a ‘yı değiştirir, b ‘yi değil println("\(a.veri), \(b.veri)") // “1, 0” yazdırır.

Referans kopyalamada ise paylaşılan bir nesne örneği oluşturulur. Kopyalamadan sonra , iki farklı değişken aynı ortak nesne örneğine işaret ederler. Bu yüzden ikinci değişkende veri değiştirildiğinde verinin orijinali de değişir.

// Referans tip class C { var veri: Int = 0 } var x = C() var y = x // x y’ye kopyalanır. x.veri = 1 // x in işaret ettiği nesneyi değiştirir bu yüzden y’de değişir. println("\(x.veri), \(y.veri)")// "1, 1" yazdırır.

Kullanım Örneği

Veri tiplerinin referans tiplerine tercih edilmesi tamamiyle veriyi kullanma şeklinizle ilgilidir.

Eğer kullandığınız verinin uygulamanın diğer bölümleri tarafından değiştirilmemesini istiyorsanız ve her zaman yeni bir özel kopyasına ihtiyaç duyuyorsanız değer tipinde bir değişkende verinizi tutabilirsiniz. Bu özellikle çoklu thread kullanan ortamlarda kullanılan değişkenin diğer threadler tarafından değiştirilmesini önlemek için kullanılır.

Hangisini Kullanmalıyım?

Değer tipi kullanım alanları

  • Bağımsız durumda kopyalar gerektiğinde
  • Veri çoklu threadli ortamlarda kullanıcaksa

Referans kullanım alanı:

  • Paylaşılacak ortak bir değişken oluşturulacaksa

Karşılaştırma

Değer tipleri == ile karşılaştırılırken Referans tiple === ile karşılaştırılır.

Swift’teki Diğer Değer Tipleri

Swift’te String,Array ve Dictionary tipleri struct olarak oluşturulmuşlardır. Bu yüzden bu tiplerdeki değişkenler yeni bir sabite ya da değişkene atandığında veya parametre olarak geçirildiğinde aslında kopyaları geçirilir.


Originally published at iosmuhendisi.com on March 13, 2015.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.