UserDefaults ile Dahili Depolamaya Giriş

Bu yazıda UserDefaults kullanarak lokal veritabanı konusunu ele alıyoruz. Lokal Veritabanı çözümlerinin en basiti olan UserDefaults konusunda şu başlıkları inceleyeceğiz:

  1. UserDefaults Nedir?
  2. Ne İşe Yarar?
  3. Nasıl Çalışır?
  4. Hangi Verileri Saklayabilirim?
  5. Avantajları/Dezavantajları Nelerdir?
  6. Hangi Durumlarda Kullanmalıyım?
  7. Nasıl Veri Kaydedilir?
  8. Nasıl Veri Okunur?
  9. Özet

 

UserDefaults Nedir?

UserDefaults sınıfı her uygulama açılışında kullanmaya başlayabileceğiniz lokal bir veritabanıdır. Key-Value şeklinde çalıştığı için Dictionary benzetmesi de yapılabilir.

 

Ne İşe Yarar?

Swift3 öncesinde NSUserDefaults adıyla bilinen şimdiki adıyla UserDefaults, uygulamamız ile ilgili küçük boyuttaki verileri telefon hafızasında saklayabilmemizi sağlayan bir yapıdır. Bu sayede uygulama ayarları, basit veri türleri ve kullanıcı bilgileri gibi verileri bir web servisine istek atmaya gerek kalmadan dahili olarak depolamamızı sağlar.

Veya bazı uygulamalar tasarım gereği offline kullanmak için yapılmışlardır. Bu tip bir durumda da uygulama ile ilgili birçok bilgiyi telefon hafızasında saklamak için UserDefaults kullanmak mantıklı olabilir.

 

Nasıl Çalışır?

UserDefaults objesi aslında görünmeyen bir .plist dosyasıdır. Her uygulamanın UserDefaults objesi farklıdır ve birbirlerine müdahale edemezler. Uygulama açılışıyla beraber UserDefaults bilgileri hafızaya yüklenir ve uygulama açık olduğu sürece bu bilgiler erişilebilir ve modifiye edilebilir durumda olur. Uygulamanın silinmesi ile beraber ise bağlı bulunduğu UserDefaults objesi de silinir.

 

Hangi Verileri Saklayabilirim?

UserDefaults ile String, Float, Int, Double, Bool, Date gibi built-in veri türlerini saklayabilirken Data tipindeki custom objeleri de kolayca saklayabilir ve okuyabilirsiniz.

 

Avantajları/Dezavantajları Nelerdir?

Avantajları kolay yaratılabilir, kullanılabilir ve yönetilebilir olmasıdır.

Dezavantajları ise bilgilerin şifrelenmediği için güvenli olmayışı, büyük veriler saklamak ve yönetmek için uygun olmaması ve “key-value” haricinde daha kompleks veri tabanı sorgulamaları yapmamıza izin vermemesidir.

 

Hangi Durumlarda Kullanmalıyım?

Uygulamanın ilk defa açılıp açılmadığı bilgisini tutarken (Onboarding ekranlarını gösterirken bu bilgi kontrol edilebilir.)

Uygulamayı kullanırken tercih edilen tema, font, dil gibi bilgileri saklarken

Giriş ekranında kişinin e-mail, cep telefonu veya kullanıcı adı bilgisini otomatik olarak getirmek için kaydederken (Parola için keychain tercih edilmelidir.)

Oyun tarzı bir uygulama geliştiriyorsanız kişinin skorunu, kullanma süresini vs tutarken

gibi durumlarda UserDefaults kullanabiliriz.

 

Nasıl Veri Kaydedilir?

Örneğin string tipinde bir veri saklayacaksak:

şeklinde kullanabiliriz. Burada “key” olarak verdiğimiz isme dikkat etmeliyiz çünkü veriyi bu anahtar ile sorgulayacağız.

 

Nasıl Veri Okunur?

Veriyi geri okumak için ise yazma işlemi yaparken belirttiğimiz anahtar kelimeyi belirtmeli ve type casting yaparak kullanmalıyız.

Bunun için ya varsayılan değer kullanmalı:

ya da Optional Binding yapmalıyız:

 

Özet

Özet olarak şunları söyleyebiliriz:

UserDefaults sınıfı her uygulama açılışında kullanmaya başlayabileceğiniz lokal bir veritabanıdır.

“Key-Value” şeklinde çalışır.

Uygulama ayarları, basit veri türleri ve kullanıcı bilgileri gibi verileri bir web servisine istek atmaya gerek kalmadan dahili olarak depolamamızı sağlar.

Uygulama açılışıyla beraber UserDefaults bilgileri hafızaya yüklenir ve uygulama açık olduğu sürece bu bilgiler erişilebilir ve modifiye edilebilir durumda olur.

Primitive ve custom data obje türleri muhafaza edilip okunabilir.

Kolay yaratılabilir, kullanılabilir ve yönetilebilirdir fakat bilgiler şifrelenmediği için güvenli değildir.

Uygulamanın ilk defa açılıp açılmadığı bilgisini tutmak, giriş ekranında kişinin e-mail, cep telefonu veya kullanıcı adı bilgisini otomatik olarak getirmek için kaydetmek gibi durumlarda kullanılabilir.