こんばんわ、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の管理用クラスだったかと思います。
それでは良い開発ライフを〜