2017-07-03 13 views
0

構造をplistで保存するために、すべてのカスタムクラスをMirrorを使って辞書に変換します。鏡では、単に各値をその名前で保存するので、変数 "title"を持つクラスは、キー "title"と辞書の値を持つ辞書になります。辞書をカスタムタイプに変換する

質問はどうですか?私はすべての辞書に "タイプ"の情報を格納するので、どのタイプが辞書に変わるべきか分かっていますが、どのように変換を行うのか分かりません。私はObjective-CでsetValue: forKey:を使用していましたが、私がSwiftに移ったとき、私はこれがもう動作しない多くの構造体を持っています。

私が考えることのできる唯一の解決策は、すべてのカスタムタイプをinit(dictionary: [String: Any])関数を記述するプロトコルに準拠させて、そのタイプの辞書に手作業で翻訳することです。私の一般的なコンバータ関数では、次に型を取得し、switch文を使用して、適切な型のinitを呼び出します。私はアプリ全体に何千ものプロパティを持っていますが、それはまったくばかげているようですが、手作業で書くと

title = dictionary["title"] 

です。簡単な方法がありますか?

答えて

0

あなたがレイアウトしたオプションは大丈夫だと思います。 init?(dictionary: [String: Any])のようなオプションのinitを使用することをお勧めします。そうすれば、特定のキーと値のペアが使用可能であることを保証し、最終オブジェクトが不完全な場合はnilを返すことができます。

しかし、MantleObjectMapperのようなものから恩恵を受ける可能性があるようですが、どちらも直列化をうまく処理します。

+0

リンクのためのtbogoisaありがとうございます。私はそれが避けられれば外部の図書館を使用することの大きなファンではない、特に迅速に変化するすべての時間。最後の手段として、それは何よりも優れていると言いました。 initについてはうまくいきますが、私の問題は多くの変数を持つ構造体が辞書のキーと同じ名前になっていることです。そのコードをすべて書くのは無意味なので、一般的な方法を期待していますそれはすべての世話をします。ミラーはそれが何をしているのか、それがないと信じるのは難しいようです。 –

+1

まあ、あなたは運が良かった(半)。あなたの記述が現時点で言語機能であるとは思っていませんが、AppleはWWDCで今年、オブジェクトのシリアル化が次のアップデートでよりうまくサポートされると発表しました。 https://medium.com/@vonkunesnewton/thoughts-after-two-days-of-wwdc-2017-1b7ec5b44cca – tbogosia

関連する問題