質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

319閲覧

自作クラスの配列を UserDefaults などで永続化させたい。

todayske

総合スコア36

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/08/15 23:06

色んな型のプロパティを持った少し複雑なクラスがあって、そのインスタンスを入れた配列を永続化させたいです。

Swift

1// やや複雑なクラス 2class Man { 3 let name: String 4 let birthDay: Date // Date とかある。(もしかしたら配列の Date もあるかも) 5 var height: Int 6 var girlfriends: [String]? // Optional とか 配列とかもある。 7 8 init(_name: String, 9 _birthDay: Date, 10 _height: Int, 11 _girlfriends: [String]?) { 12 self.name = _name 13 self.height = _height 14 self.girlfriends = _girlfriends 15 self.birthDay = _birthDay 16 } 17} 18 19let yasu = Man(_name: "Yasu", 20 _birthDay: Date(timeIntervalSince1970: 0), 21 _height: 168, 22 _girlfriends: nil) 23 24let hiro = Man(_name: "Hiro", 25 _birthDay: Date(timeIntervalSince1970: 0), 26 _height: 181, 27 _girlfriends: ["yumi", "mika", "Emma"]) 28 29 30let twins = [yasu, hiro] // ← この情報を永続化させたい。

色々調べてみたのですが、こちらのやり方だとクラス中の配列をどう扱っていいか分からず、なかなか上手くできませんでした。

今は UserDefaults に格納しようと思っているのですが、他の方法の方が良かったらそれを試したいと思っています。

そもそも全然違うアプローチが適切な気もするのですが、どうググれば良いのかも分からない状態で困っています。

何か良い方法をご存知の方がいれば、お知恵をお貸しいただけるとすごく助かります。
情報が不足していたら追記しますので、コメントをいただけたらと思います。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

リンク先の通りで問題ないです。
配列や辞書の場合中身も再帰的にシリアライズされますので、配列の中であるとかは気にする必要はありません。

NSCodingに準拠していればNSKeyedArchiverData型に変換できるので、UserDefaultsに保存してもいいですし、Datawrite(to:options:)で直接ファイルに保存することもできます。

投稿2017/08/16 07:01

MasakiHori

総合スコア3384

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

todayske

2017/08/17 10:28

そうなんですね! やってみます! > NSCodingに準拠していればNSKeyedArchiverでData型に変換できるので、UserDefaultsに保存してもいいですし、Dataのwrite(to:options:)で直接ファイルに保存することもできます。 これについても知らなかったので、とても勉強になりました! ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問