配列の中身をListで表示し、順番を入れ替えたり削除したりした後にUserDefaultsに保存するようにしています。
UserDefaultsの中身が変わるとViewを更新できるようにしたいと考えています。
removeObjectでUserDefaultsでの削除を行った際にViewを更新する方法がわからず、質問させていただきました。
アプリを再起動するとremoveObjectが効いていて、データの削除ができていることは確認できました。
swift
1struct listUserDefaultsView: View { 2 3 @ObservedObject var useList = useUserDefaults() 4 5 var body: some View { 6 List { 7 Section(header: Text("入れ替えも削除も可能なリスト")) { 8 ForEach(useList.phones, id: .self) { phone in 9 HStack { 10 Image("logo") 11 .resizable() 12 .frame(width: 20, height: 20) 13 Text(phone) 14 }.id(UUID()) 15 } 16 .onMove(perform: useList.phoneReplace) 17 .onDelete(perform: useList.phoneDelete) 18 } 19 } 20 .navigationBarTitle("UserDefaultsを用いたリスト", displayMode: .inline) 21 .navigationBarItems(leading: Button("データ消去") { 22 self.useList.userDefaultsRemove() 23 },trailing: EditButton()) 24 .onAppear() { 25 guard let phoneItem = UserDefaults.standard.array(forKey: "phoneRow") as? [String] else { 26 return 27 } 28 self.useList.phones = phoneItem 29 } 30 } 31} 32 33class useUserDefaults: ObservableObject { 34 35 let key = "phoneRow" 36 let defaults = UserDefaults.standard 37 38 @Published var phones = ["iPhone", "ZenFone", "Google Pixel"] 39 40 func phoneReplace(_ from: IndexSet, _ to: Int) { 41 phones.move(fromOffsets: from, toOffset: to) 42 defaults.set(phones, forKey: key) 43 } 44 45 func phoneDelete(offsets: IndexSet) { 46 phones.remove(atOffsets: offsets) 47 defaults.set(phones, forKey: key) 48 } 49 50 func userDefaultsRemove() { 51 defaults.removeObject(forKey: key) 52 } 53 54}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/22 02:01
2020/07/22 04:23