iOSアプリで定番のUserDefaultsの使い方

f:id:daihase:20190809100049p:plain

こんばんわ、daihaseです。

久々にSwiftネタを。 iOSアプリ開発をやっていれば必ずといって使うUserDefaults、その使い方などを簡単に紹介。

UserDefaultsとは、簡単にいうとデータなどをアプリ内に保存し管理する方法の1つです。アプリで例えばスプラッシュが流れてユーザーのuserIdがあればログイン済みなのでトップ画面へ、なければ未登録のユーザーなので新規登録画面へ、といった処理をする際など、このUserDefaultsを使うかと思います。

自分がよく定義する簡単なサンプルを。というかメモを。

import Foundation
import UIKit

struct AccountData {
  private enum DataType: String {
  case userId = "user_id"
  case authToken = "auth_token"
  case email = "email"
  case password = "password"
  }
  
  private init() {}
  private static let ud = UserDefaults.standard
  
  static var userId: Int {
    get { return self.ud.integer(forKey: AccountData.DataType.userId.rawValue) }
    set { self.ud.set(newValue, forKey: AccountData.DataType.userId.rawValue); self.ud.synchronize() }
  }
  
  static var authToken: String? {
    get { return self.ud.string(forKey: AccountData.DataType.authToken.rawValue) }
    set { self.ud.set(newValue, forKey: AccountData.DataType.authToken.rawValue); self.ud.synchronize() }
  }
  
  static var email: String? {
    get { return self.ud.string(forKey: AccountData.DataType.email.rawValue) }
    set { self.ud.set(newValue, forKey: AccountData.DataType.email.rawValue); self.ud.synchronize() }
  }
  
  static var password: String? {
    get { return self.ud.string(forKey: AccountData.DataType.password.rawValue) }
    set { self.ud.set(newValue, forKey: AccountData.DataType.password.rawValue); self.ud.synchronize() }
  }
}

 

例えば登録画面などで一度登録し、サーバーから返ってきたauthTokenやらuserIdを保存するとします。恐ろしく端折りますが、iOSなんかだとAlamofireあたりを使って通信処理、SwiftyJSONでパース、以下みたいに上で作ったAccountDataのそれぞれの変数にセットしてやります。

// ... 細かい処理は端折ってます... 
AccountData.authToken = json["auth_token"].string
AccountData.userId = json["user_id"].int ?? 0

 

AccountData内ではそれぞれコンピューテッドプロパティを通してset, getをしているので上記の場合setされ、UserDefaultsのsynchronizeメソッドで即時反映されますね。

authTokenが端末にあれば...のような処理は以下のような感じになります。

 if let _ = AccountData.authToken {
            // 何か処理.
 }

 

まぁよく作る定番なUserDefaultsの管理用クラスだったかと思います。

それでは良い開発ライフを〜