こんにちは、この質問を開いていただきありがとうございます!
3日間悩んだ末、答えにたどり着かなかったので質問させていただきます。
UserDefaultsに保存したオブジェクトの配列(JSON形式)をエンコードしたいのですが、うまくいきません。そこでまずは現在のコードを共有させていただきます。
以下のようにしてstringArrayをdecodeする試みをしています(なぜかdata?.data(forKey:)では読み込まれなかったのでstringArrayにしています)。
swift
1 func getSnapshot(in context: Context, completion: @escaping (ExampleEntry) -> ()) { 2 let data = UserDefaults.init(suiteName:widgetGroupId) 3 4 if let tagsData = data?.stringArray(forKey: "favorite1") { 5 do { 6 NSLog("Ohayo: \(tagsData)") 7 let tags = try decoder.decode([TagModel].self, from: tagsData) 8 let result = ExampleEntry(date: Date(), tags: tags) 9 completion(result) 10 } catch { 11 print("Unable to decode tags") 12 } 13 } 14 15 let testEntry = ExampleEntry(date: Date(), tags: [TagModel(id: 1, body: "test")]) 16 completion(testEntry) 17 } 18 19struct TagModel: Codable, Identifiable { 20 let id: Int 21 let body: String 22} 23 24struct ExampleEntry: TimelineEntry { 25 let date: Date 26 let tags: [TagModel] 27}
しかし、このコードではうまく動きません。
NSLog("Ohayo: \(tagsData)")
で出力される結果として、
Ohayo: ["{"id":1,"body":"면과"}", "{"id":2,"body":"여행"}", "{"id":3,"body":"책들"}"]
このように出力されるものの、decodeメソッドのtagsDataで渡しているデータ型が違うからだというところまでは理解できたのですが、どうしたら[TagModel]
の形で扱えるようになるかがわかりません。
最終的には
swift
1ExampleEntry(date: Date(), tags: [TagModel(id: 1, body: "test")])
というような形で扱いたいと考えているため、お力添えいただけますと幸甚です。
回答1件
あなたの回答
tips
プレビュー