
UserDefaults Nedir?
UserDefaults, iOS uygulamalarında küçük ve önemli bilgileri kalıcı olarak saklamanın en kolay yollarından biridir. Kullanıcı ayarları, uygulama tercihleri ya da ufak tefek bilgileri kaydetmek için oldukça kullanışlıdır. Mesela, kullanıcı karanlık tema seçeneğini açtıysa veya belirli bir giriş bilgisi girdiyse, bu bilgileri UserDefaults ile saklayabilirsiniz. Böylece uygulama kapatılıp tekrar açıldığında bile bu ayarları hatırlamış olur, kullanıcı her seferinde aynı şeyleri tekrar yapmak zorunda kalmaz.
Pekii Neden UserDefaults Kullanmalıyız? 🤔
Uygulamalarımızda bazen küçük ama sürekli ihtiyacımız olan bilgileri kaydetmemiz gerekebilir. Bu durumda büyük bir veritabanına gerek kalmadan UserDefaults işimizi görebilir. Örneğin, bir hava durumu uygulaması yaptığınızı düşünün; kullanıcı en son İstanbul’a baktıysa, bu bilgiyi UserDefaults ile saklayabilirsiniz. Böylece uygulama tekrar açıldığında kullanıcı direkt olarak İstanbul’un hava durumunu görür.
Aynı şekilde, kullanıcı ayarlarını saklamak için de çok kullanışlıdır. Mesela uygulamanızda bir “karanlık mod” seçeneği varsa, kullanıcı bu modu seçtiğinde bilgiyi UserDefaults’a kaydedebilirsiniz. Böylece uygulama her açıldığında kullanıcı ayarı tekrar yapmak zorunda kalmaz; uygulama otomatik olarak karanlık modda açılır.
UserDefaults ile Hangi Tür Verileri Kaydedebiliriz?
UserDefaults ile Bool, Float, Double, Int, String ve URL gibi temel veri tiplerini saklayabilirsiniz. Bunların yanı sıra daha karmaşık veri tiplerini de destekler; örneğin diziler (Array), sözlükler (Dictionary), tarih (Date) ve Data verilerini de UserDefaults’a kaydedebilirsiniz. Böylece, uygulamanızda birçok farklı türde bilgiyi kolayca saklayabilirsiniz.
Unutmayın ki UserDefaults hızlı ve kolay bir yöntemdir, ancak çok fazla veri kaydetmek uygulamanın yüklenme süresini yavaşlatabilir. Sakladığınız veriler 100KB(≈)’yi geçiyorsa, UserDefaults yerine daha kapsamlı veri depolama çözümlerini düşünmek daha iyi olur.
Kısacası, UserDefaults uygulamanızda küçük ama önemli bilgileri saklamak için idealdir. Daha büyük veri ihtiyaçlarınız için ise daha güçlü çözümler kullanmak her zaman daha sağlıklıdır.
UserDefaults Fonksiyonun Temel Kullanımı Nasıldır? 👩🏻💻
UserDefaults.standard.set(value: Any?, forKey: String)
UserDefaults’ta veri saklamak için iki temel bilgiye ihtiyacınız var: value ve forKey. Value, saklamak istediğiniz veriyi ifade ederken, forKey ise bu veriyi daha sonra bulabilmek için kullanacağınız anahtardır.
Örnek olarak; dark(koyu) mode tercihinin kaydedilmesi;
UserDefaults.standard.set(true, forKey: "isDarkModeEnabled")
UserDefults Veri Çekme :
Kaydettiğiniz veriyi geri almak oldukça basittir. value(forKey:) veya object(forKey:) kullanarak kolayca erişebilirsiniz. Örneğin, daha önce kaydettiğimiz koyu mod bilgisini çekmek istiyorsak;
UserDefaults.standard.value(forKey: "isDarkModeEnabled")
Dipnot ❗️
Swift’te UserDefaults kullanarak kaydettiğimiz bir veriyi okurken, türün doğru olup olmadığını kontrol etmemiz gerekebilir. Bu durumda iki temel seçeneğimiz var:
as! ile zorunlu (forced) bir dönüşüm yapmak
as? ile daha güvenli bir dönüşüm yapmak
as! ve as? Kullanımı
as! ile veri tipini zorlayarak dönüştürebiliriz. Ama burada dikkat etmeliyiz; eğer object(forKey:) nil dönerse uygulama çöker.😱 Bu yüzden as! riskli olabilir.
as? ise daha güvenlidir, çünkü dönüşüm başarısız olursa nil döner. Ancak, as? kullandığınızda veriyi sürekli açmak (unwrap) veya bir varsayılan değer eklemek gerekebilir. Bu da bazen kodu biraz karışık hale getirebilir.
Nil Coalescing Operatörü (??) ile Kolay Çözüm 😮💨
Neyse ki Swift bu konuda işimizi kolaylaştırıyor. Nil coalescing operatörü (??), opsiyonel bir değeri kolayca açmamızı veya nil ise varsayılan bir değer eklememizi sağlar.
Örneğin: Diyelim ki UserDefaults içine daha önce “favoriteColors” adlı bir dizi kaydettiniz ve bu diziyi geri almak istiyorsunuz. İşte bunu nil coalescing operatörüyle şu şekilde yapabilirsiniz:
let favoriteColors = UserDefaults.standard.object(forKey: "favoriteColors") as? [String] ?? []
Bu kodda, “favoriteColors” anahtarında bir veri varsa ve [String] dönüşümü başarılıysa, favoriteColors olarak atanıyor. Eğer değer nil dönerse veya dönüşüm başarısız olursa, sağdaki boş dizi [] atanıyor. Bu sayede, hem güvenli hem de temiz bir şekilde veriyi almış oluyoruz; ekstra bir açma işlemi veya varsayılan değer belirleme ihtiyacı kalmıyor.
Özetle ?? ile opsiyonel bir değeri tek satırda açabilir veya nil durumunda varsayılan bir değer atayabilirsiniz.
…
Umarım UserDefaults’u kullanırken işinizi kolaylaştıracak bilgiler verebilmişimdir. Sağlıcakla kalın! 👋🏻

