■はじめに
UserDefaultsを使用していると、物足りなくなってきませんか?
objective-cでは、簡単に保存できていた配列などがSwiftでは一手間が必要になります。
Swiftで配列などの複雑な型をUserDefaultsに保存する方法として色々方法はありますが、ここでは
UserDefaultsを拡張(extension)して保存、取得する方法を記載します。
◾️String配列
String型の配列を保存、取得が出来るように拡張します。
他の方の配列を保存、取得したい場合には、型を書き換えるだけです!
拡張方法は、以下です。
extension UserDefaults {
/**
* UserDefaultsに配列を設定できる様に拡張
*
* @param targetArray [String] 設定するString型配列を渡す
* @param key String Userdefaultsのキーを渡す
*/
func setHairetu(_ targetArray: [String], _ key: String) {
set(targetArray, forKey: key)
}
/**
* UserDefaultsから配列を取得できる様に拡張
*
* @param key String Userdefaultsのキーを渡す
* @return [String]? 対象のキーにString型配列がある場合には、その配列を返す。
* ない場合には、nilを返す。
*/
func getHairetu(_ key: String) -> [String]? {
guard let areas = object(forKey: key) as? [String] else { return nil }
return areas
}
}
実際に、保存、取得する方法は以下です。
// 配列を保存する方法
let hairetu = ["1", "2"]
UserDefaults.standard.setHairetu(hairetu, "Key")
// 配列を取得する方法
UserDefaults.standard.getHairetu("Key")
すごく簡単ですね!
一度拡張してしまえば、以降はこのように簡単に使用できるのでオススメです。
◾️辞書の配列
今度は、より複雑な「辞書型」のデータを配列で持つ場合の拡張を記載します。
ほとんど配列と同じ方法ですが。。。
そもそも、辞書型の配列とは、以下のようなデータのことです。
var dic1: Array<[String: String]> = [
["one" : "aa", "two" : "bb"],
["three" : "cc", "fo" : "dd"]
]
このデータを拡張する方法は、以下です。
extension UserDefaults {
/**
* UserDefaultsに辞書型を格納する配列を設定できる様に拡張
*
* @param targetArray Array<[String: String]> 設定する辞書を格納した配列を渡す
* @param key String Userdefaultsのキーを渡す
*/
func setArray(_ targetArray: Array<[String: String]>, _ key: String) {
set(targetArray, forKey: key)
}
/**
* UserDefaultsから辞書型を格納した配列を取得できる様に拡張
*
* @param key String Userdefaultsのキーを渡す
* @return Array<[String: String]>? 対象のキーに辞書型を格納した配列がある場合には、その配列を返す。
* ない場合には、nilを返す。
*/
func getArray(_ key: String) -> Array<[String: String]>? {
guard let areas = object(forKey: key) as? Array<[String: String]> else { return nil }
return areas
}
}
取得、保存する方法は以下です。
// 辞書方の配列を保存する方法
var dic1: Array<[String: String]> = [
["one" : "aa", "two" : "bb"],
["three" : "cc", "fo" : "dd"]
]
UserDefaults.standard.setArray(dic1, "Key")
// 辞書方の配列を取得する方法
UserDefaults.standard.getArray("Key")