Swift'te Değer ve Referans Tipleri

Merhaba, bu mobide value/reference (değer/referans) tiplerinin özelliklerini, benzerliklerini ve farklılıklarını öğreneceksiniz. Aynı zamanda bu soyut kavramları aklınızda daha iyi canlandırmak için kod örnekleri ile pekiştireceğiz.


Görsel Referansı

Swift’teki türler iki kategoriye ayrılır. İlk kategori olan değer tipinde (value type) struct, enum, Tuple, Int, Bool, String ve Dictionary bulunur. Bu tiplerden biri ile tanımladığınız verilerin her biri hafızada benzersiz (unique) bir değer ile eşitlenir.

Diğer kategori olan referans tipine örnek olarak class verilebilir. Class'tan oluşturduğumuz bir nesneyi farklı onlarca değişkene atasak bile hafızada karşılık geldiği değer aynı kalacaktır. Adından da belli olduğu gibi her değişken için yeni bir değer atamak yerine ilk değeri referans alacaktır.


class Cars {
  var brand = ""
}

var car1 = Cars()
car1.brand = "BMW"

var car2 = car1
car2.brand = "Fiat"

print(car1.brand) // Fiat
print(car2.brand) // Fiat

Cars adında bir class oluşturuyoruz ve cars1 adında bir örnek oluşturuyoruz. Aynı zamanda cars1 değişkeninin, brand property'sini “BMW” olarak tanımlıyoruz. Daha sonra cars2 adındaki değişkeni cars1 tipinden oluşturuyoruz. cars2 değişkeninin brand property'sini ise “Fiat” olarak tanımlıyoruz. Çıktıya baktığımızda cars1 ve cars2'nin aynı çıktıyı verdiğini görüyoruz.

Bu sizi ilk bakışta biraz şaşırtabilir fakat referans tipleri az önce de bahsettiğim gibi hafızada tek bir yeri işaret ettiğinden dolayı yaptığımız tüm değişiklikler hafızadaki tek bir noktayı değiştiriyor. Bir de aynı örneği struct yani bir değer tipi ile deneyelim.


struct Cars {
  var brand = ""
}

var cars1 = Cars()
cars1.brand = "BMW"

var cars2 = cars1
cars2.brand = "Fiat"

print(cars1.brand) // BMW
print(cars2.brand) // Fiat

Gördüğünüz gibi bu sefer işler biraz daha değişti, değer tipleri hafızada her değişken tanımladığımızda yeni bir kopya oluşturuyor. cars1 ve cars2 arasında herhangi bir bağ kalmıyor ve birbirlerinden bağımsız olarak hafızada tutuluyorlar.

Umarım bir şeyler daha anlaşılır olmaya başlamıştır, şimdi de bu konuda benim en sevdiğim grafiklerden birini sizlerle paylaşmak istiyorum.