[解決済み] SwiftのCodableを使って、辞書にエンコードするには?
2022-05-11 11:58:11
質問
Swift 4の構造体である
Codable
. その構造体を辞書にエンコードするための簡単な組み込みの方法はありますか?
let struct = Foo(a: 1, b: 2)
let dict = something(struct)
// now dict is ["a": 1, "b": 2]
どのように解決するのですか?
もし、データの移動が多少あってもいいのであれば、次のような方法があります。
extension Encodable {
func asDictionary() throws -> [String: Any] {
let data = try JSONEncoder().encode(self)
guard let dictionary = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any] else {
throw NSError()
}
return dictionary
}
}
またはオプションのバリアント
extension Encodable {
var dictionary: [String: Any]? {
guard let data = try? JSONEncoder().encode(self) else { return nil }
return (try? JSONSerialization.jsonObject(with: data, options: .allowFragments)).flatMap { $0 as? [String: Any] }
}
}
仮定の話
Foo
に準拠し
Codable
または本当に
Encodable
であれば、こうすればいいのです。
let struct = Foo(a: 1, b: 2)
let dict = try struct.asDictionary()
let optionalDict = struct.dictionary
逆の場合は(
init(any)
) にしたい場合は、次のものを見てください。
Codableに準拠したオブジェクトを辞書/配列で初期化する
関連
-
[解決済み] Xcode 8 シェルスクリプト呼び出しエラー
-
[解決済み] SwiftUIのFacebookログイン。FacebookのIDをビューに戻すには?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] Swiftの配列を文字列に変換するには?
-
[解決済み]SwiftでErrorタイプでローカライズされた説明を提供する方法は?
-
[解決済み】Swiftで辞書に要素を追加する方法は?
-
[解決済み] ある項目のDictionaryを別のDictionaryに追加する方法
-
[解決済み] SwiftでJSON辞書の型を持つプロパティをデコードする方法 [45] デコード可能なプロトコル
-
[解決済み] Swift Codableからプロパティを除外する方法は?
-
[解決済み] SwiftのJSONDecodeで配列のデコードに失敗する(単一要素のデコードに失敗した場合
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] スウィフト 2: !, ?-" オプション型「...」の値がアンラップされていない"
-
[解決済み] Swiftで文字列が別の文字列を含んでいるかどうかを確認するには?
-
[解決済み] Swiftのコンストラクタ
-
[解決済み] Swiftの@selector()?
-
[解決済み] String型のenumを列挙する方法は?
-
[解決済み】Swiftの辞書にキーが含まれているかどうかを判断し、その値を取得する。
-
[解決済み】Swiftはドキュメント生成に対応しているのか?
-
[解決済み】Swiftの構造体のために、メンバーごとの初期化子をデフォルトで公開するにはどうすればよいですか?
-
[解決済み】プログラムによってナビゲーションのタイトルを変更する
-
[解決済み】プロパティのゲッターとセッター