朧の.Netの足跡
問合せ先:support@oborodukiyo.info サイト内検索はこちら
Swift UserDefaultsの使い方





SwiftでUserDefaultsを利用すると、今回起動時のデータを記録して、次回起動時にそれを読み込んで利用することができます。
読み込むタイミングは、アプリ起動時か、前回のデータを利用したいViewのロード時になるかと思います。
保存するタイミングは、アプリ終了時か、Viewの終了時になるかと思います。
また一番最初には保存したデータがないので、ものによってはnilが返されますので、その場合どうするかを考えておかないと行きません。
サンプルでは、nilの時は空文字列や、空の配列などをセットするようにしています。


class ViewController: UIViewController {
    //UserDefaultsのインスタンスをここで取得しておく
    let ud: UserDefaults = UserDefaults.standard
    var udData01: String = ""
    var udData02: Int = 0
    var udData03: [String] = []
    var udData04: [String : Int] = [:]
    var udData05: [UIColor]? = []

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        //UserDefaultsより読み込む
        loadUserDefaults()

        //データの書き換え
        changeData()

        //UserDefaultsを書き込む
        saveUserDefaults()
    }

    //UserDefaultsより読み込むメソッド
    func loadUserDefaults() {
        //文字列
        udData01 = ud.string(forKey: "01") ?? ""
        //数値データ
        udData02 = ud.integer(forKey: "02")
        //配列
        udData03 = ud.array(forKey: "03") as? [String] ?? []
        //辞書型
        udData04 = ud.dictionary(forKey: "04") as? [String:Int] ?? [:]
        
        //そのままではUserDefaultsに保存できない型
        var arData: [Data]? = []
        arData = ud.array(forKey: "myColors") as? [Data]
        self.udData05?.removeAll()
        self.udData05 = []
        
        for i in 0 ..< 20 {
            if let data = arData?[i] {
                //ここでUIColorに戻しています。
                let localColor: UIColor = NSKeyedUnarchiver.unarchiveObject(with: data) as! UIColor
                self.udData05!.append(localColor)
            }
        }
    }
    
    //UserDefaultsに書き込むメソッド
    func saveUserDefaults() {
        //保存は基本の型のは同じ構文
        ud.set(udData01, forKey: "01")
        ud.set(udData02, forKey: "02")
        ud.set(udData03, forKey: "03")
        ud.set(udData04, forKey: "04")
        
        //そのままではUserDefaultsに保存できない型
        var arData: [Data] = []
        for i in 0 ..< 20 {
            //ここでUserDefaultsに保存できるように変換しています。
            let localData: Data = NSKeyedArchiver.archivedData(withRootObject: self.udData5![i])
            arData.append(localData)
        }
        
        ud.set(arData, forKey: "myColors")
    }
    
    //データを書き換えるメソッド
    func changeData() {
        udData01 = "ABC"
        udData02 = 100
        udData03 = ["abc", "DEF", "GHI", "JKL"]
        udData04["a"] = 20
        udData04["b"] = -30
        udData04["z"] = -10000
        
    }
}
    
} }








良いやや良い普通やや悪い悪い
7 0 7 0 0

投稿日時評価コメント
2020/10/16 良い 管理者により削除されました。
2020/10/09 普通 管理者により削除されました。
2020/10/07 普通 管理者により削除されました。
2020/10/07 普通 管理者により削除されました。
2020/10/02 良い 管理者により削除されました。
2020/10/01 普通 管理者により削除されました。
2020/09/21 良い 管理者により削除されました。
2020/09/02 普通 管理者により削除されました。
2020/08/29 良い 管理者により削除されました。
2020/08/17 良い 管理者により削除されました。
2020/08/06 良い 管理者により削除されました。
2020/07/23 良い 管理者により削除されました。
2020/06/24 普通 管理者により削除されました。
2020/06/15 普通 管理者により削除されました。