LoginSignup
11
13

More than 3 years have passed since last update.

[初心者向け]UserDefaultsを使って永続的に配列を保存する

Posted at

Userdefaultsの復習

UserDefaultsのインスタンスの生成

まずはUserDefaulsのインスタンスをクラスの上部で作成します

ViewController.swift
var userDefaults = UserDefaults.standard

データを保存する

次にデータを保存します.
UserDefaultsはInt, String型, 配列, Date型, Float型, Double型の保存に対応していて、保存の方法は全て同じです.

今回はnamesという配列を保存します.

ViewController.swift
userDefaults.set(names, forKey: "キー")

データを取り出す

次にデータを読み出してみます.
取り出す場合は取り出す変数の型により取り出し方が異なります.

Int型

ViewController.swift
let number = userDefaults.integer(forKey: "キー")

String型

ViewController.swift
let name = userDefaults.string(forKey: "キー")

配列

ViewController.swift
let names = userDefaults.array(forKey: "キー")

Date型

ViewController.swift
let date = userDefaults.object(forKey: "キー") as? Date

配列を保存する場合の注意

配列をUserDefaultsを使って保存する場合を考えてみます.
このような場合、そのまま保存して良いのでしょうか?

違いますね

配列に保存する場合は、事前に保存されているデータを読み込んでからそこに追加をして、保存する必要があります.
そうしないと、毎回データを上書きしてしまい、一向に追加して保存されません.

保存する

namesというString型の配列に変数nameを保存する場合を考えてみます.

まず保存してあるかどうかを判別し、保存してあれば中身を取り出します.

ViewController.swift
var names = userDefaults.array("キー") as? [String] ?? []

上で使用している??は、保存されたデータがない場合にnamesに空の配列を代入させるために使用しています.

次に実際にnamesに新たなデータを追加して保存していきます.

ViewController.swift
names.append(name)
userDefaults.set(names, forKey: "キー")

配列に変数を新たに追加する場合はappendというメソッドを使用します.

上記をまとめるとこんな感じです.

ViewController.swift
var names = userDefaults.array("キー") as? [String] ?? []
names.append(name)
userDefaults.set(names, forKey: "キー")

取り出す場合

取り出す場合は特に留意する点はありませんが、userDefaultsで取り出す値はどれもオプショナル型になっているため、同じように??演算子を使用します

ViewController.swift
let names = userDefauls.array("キー") as [String] ?? []

最後に

初めてUserDefaultsで配列の保存や取り出しを行う際に、うまく保存できずにつまづいた経験があったので共有しました.

11
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13