[解決済み] 構造をUserDefaultsに保存する
2023-07-28 16:34:38
質問
UserDefaults に保存したい構造体があります。以下は、私の構造体です。
struct Song {
var title: String
var artist: String
}
var songs: [Song] = [
Song(title: "Title 1", artist "Artist 1"),
Song(title: "Title 2", artist "Artist 2"),
Song(title: "Title 3", artist "Artist 3"),
]
別のViewControllerで、この構造体に追加するUIButtonを以下のように作成しています。
@IBAction func likeButtonPressed(_ sender: Any) {
songs.append(Song(title: songs[thisSong].title, artist: songs[thisSong].artist))
}
ユーザーがそのボタンをクリックするたびに、構造体が UserDefaults に保存され、ユーザーがアプリを終了して再び開いたときに保存されるようにしたいのです。どのようにしたらよいでしょうか。
どのように解決するのですか?
Swift 4では、これはかなり些細なことです。Codableプロトコルを採用するようにマークすることによって、構造体をCodableにします。
struct Song:Codable {
var title: String
var artist: String
}
では、さっそくデータを見てみましょう。
var songs: [Song] = [
Song(title: "Title 1", artist: "Artist 1"),
Song(title: "Title 2", artist: "Artist 2"),
Song(title: "Title 3", artist: "Artist 3"),
]
これをUserDefaultsに取り込む方法を説明します。
UserDefaults.standard.set(try? PropertyListEncoder().encode(songs), forKey:"songs")
そして、後でまた取り出す方法を紹介します。
if let data = UserDefaults.standard.value(forKey:"songs") as? Data {
let songs2 = try? PropertyListDecoder().decode(Array<Song>.self, from: data)
}
関連
-
[解決済み] iOSまたはmacOSで、インターネット接続が有効かどうかを確認するにはどうすればよいですか?
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
-
[解決済み] C++の'struct'と'typedef struct'の違い?
-
[解決済み] .NETにおけるstructとclassの違いは何ですか?
-
[解決済み] iOS 8 UITableViewのセパレータインセット0が機能しない件
-
[解決済み] なぜクラスではなくストラクチャーを選ぶのか?
-
[解決済み] iOS Simulatorでネットワークを無効にすることは可能ですか?
-
[解決済み] UIButtonのタイトルを左揃えにするにはどうしたらよいですか?
-
[解決済み] NSOperationとGrand Central Dispatchの比較
-
[解決済み] UIViewの角丸とドロップシャドウ?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
制御が非ボイド関数の終了に達する
-
IOSラーニングノート「このクラスはxxxのキーバリューコーディングに対応していません」問題解決
-
[解決済み] Xcode 12、iOS Simulator用にビルドしても、iOS用にビルドされたオブジェクトファイルでは、アーキテクチャ「arm64」用にリンクされます。
-
[解決済み] iOSシミュレータでスクリーンショットを撮る
-
[解決済み] NSOperationとGrand Central Dispatchの比較
-
[解決済み] インポート vs #インポート - iOS 7
-
[解決済み] iPadマルチタスクのサポートには、これらの方向が必要です。
-
[解決済み] Swift 3でディスパッチキューを作成する方法
-
[解決済み] iPhoneでナビゲーションバーを1ページ目だけ非表示にする
-
[解決済み] Swiftで配列に要素を追加する