2017-12-23 6 views
-2

コード可能な構造体があり、そのプロパティを反復処理するために[String:Any]ディクショナリを作成したいと考えています。JSONシリアライズド・ディクショナリでのデータと日付のキャスト

var dictionary: [String: Any] { 
    return (try? JSONSerialization.jsonObject(with: JSONEncoder().encode(self), options: [])) as? [String: Any] ?? [:] 
} 

辞書を繰り返し、「Any」をキャストしようとすると、「データ」や「日付」のようなタイプは動作しません。キャストは「String」、「Int」、「Double」の場合にのみ機能します。どういうわけか 'データ'と '日付'をキャストすることは可能ですか?前もって感謝します。

+0

型固有の構造体がある場合、それらを不特定の辞書に変換したいのはなぜですか? JSONはそれらをサポートしていないので、 'Data'と' Date'は動作しません。 'Date'と' Data'をサポートする 'PropertyListEncoder'を使うことができます – vadian

答えて

1

JSONには、日付またはバイトシーケンス(データ)の定義済みまたは標準のエンコードがありません。

JSONEncoderとJSONDecoderの両方にプロパティーdateEncodingStrategydataEncodingStrategyがあります。これは、JSONで使用しているどのフォーマットにも一致するように設定できます。

+0

これは正しいです。欲求不満の部分は、日付の書式設定文字列を設定する方法を考え出しています。私はそれを動作させるためにプレイグラウンドに入ることを推奨し、この参照を使用してください:[OS X 10.9とiOS 7+のUnicodeの日付フォーマット](http://www.unicode.org/reports/tr35/tr35-31/tr35- dates.html#Date_Format_Patterns)。 – CommaToast

+0

@CommaToast https://stackoverflow.com/questions/46458487/how-to-convert-a-date-string-with-optional-fractional-seconds-using-codable-in-s/46458771?s=4|0.0000 #46458771 –

関連する問題