##【SwiftUI, Swift】UserDefaultsで独自に定義した型の配列が保存できません。
###SceneDelegate.swift
SwiftUI
1import UIKit 2import SwiftUI 3class SceneDelegate: UIResponder, UIWindowSceneDelegate { 4 5 var window: UIWindow? 6 7 8 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { 9 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 10 11 12 13 let contentView = ContentView() 14 .environment(.managedObjectContext, context) 15 .environmentObject(GlobalData()) 16 17 18 if let windowScene = scene as? UIWindowScene { 19 let window = UIWindow(windowScene: windowScene) 20 window.rootViewController = UIHostingController(rootView: contentView) 21 self.window = window 22 window.makeKeyAndVisible() 23 } 24 } 25 26 func sceneDidDisconnect(_ scene: UIScene) { 27 } 28 29 func sceneDidBecomeActive(_ scene: UIScene) { 30 } 31 32 func sceneWillResignActive(_ scene: UIScene) { 33 } 34 35 func sceneWillEnterForeground(_ scene: UIScene) { 36 } 37 38 func sceneDidEnterBackground(_ scene: UIScene) { 39 (UIApplication.shared.delegate as? AppDelegate)?.saveContext() 40 } 41 42 43}
###ContentView.swift
SwiftUI
1struct ContentView: View { 2 @EnvironmentObject var globalData: GlobalData 3 var body: some View { 4 Button(action: { 5 self.globalData.data.append(hogeStruct(text: "テキスト", weather: .sunny)) 6 self.globalData.saveData() 7 }) { 8 Text("Add Data") 9 } 10 } 11} 12 13class GlobalData: ObservableObject { 14 @Published var data: [hogeStruct] = [] 15 16 func saveData() { 17 let u = UserDefaults.standard 18 u.set(self.data, forKey: "data")//ここでエラーが出る。 19 } 20} 21 22struct hogeStruct { 23 var id = UUID() 24 var text: String 25 var weather: Weather 26 27 enum Weather: CaseIterable { 28 case sunny 29 case cloudy 30 } 31} 32
↑問題の再現に必要なコードです。
###エラーが出る箇所
SwiftUI
1let u = UserDefaults.standard 2u.set(self.data, forKey: "data")//ここ!
独自にhogeStruct型を宣言し、その配列をUserDefaultsに保存しようとしてエラーが出ます。
hogeStruct型の配列をスマホ内に保存する方法は他にありますか?
###試したこと
Core Dataを使う
しかし独自の型は保存できない仕様のようです。(HashValueが関係している???)
hogeStruct型をHashableに準拠させるのでしょうか。
ご教授よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/14 07:44
2020/04/14 09:08
2020/04/15 05:12
2020/04/15 07:39
2020/04/15 14:50