RealmSwiftを使ってアプリを作成しています。
データを削除して、リストから削除したアイテムを消したいのですが、表示されてしまいます。
どうすれば非表示にできますか?
データの更新や追加は反映されました。
swift
1struct ListView: View { 2 @ObservedObject private var fetcher = Fetcher() 3 4 var body: some View { 5 NavigationView { 6 VStack { 7 ForEach(self.fetcher.items) { (item: Item) in 8 NavigationLink(destination: DetailView(id: item.id)) { 9 Text(item.title) 10 } 11 } 12 } 13 } 14 } 15} 16 17struct DetailView: View { 18 var id: String 19 @ObservedObject private var fetcher = Fetcher() 20 @Environment(.presentationMode) private var presentationMode: Binding<PresentationMode> 21 22 var body: some View { 23 VStack { 24 Button(action: { 25 self.presentationMode.wrappedValue.dismiss() 26 self.fetcher.delete(id: self.id) 27 }) { 28 Text("Delete") 29 } 30 } 31 } 32} 33 34class Fetcher: ObservableObject { 35 var realm = try! Realm() 36 var objectWillChange: ObservableObjectPublisher = .init() 37 private(set) var items: Results<Item> 38 private var notificationTokens: [NotificationToken] = [] 39 40 init() { 41 items = realm.objects(Item.self) 42 43 notificationTokens.append(items.observe { _ in 44 self.objectWillChange.send() 45 }) 46 } 47 48 func delete(id: String) { 49 guard let item = realm.objects(Item.self).filter("id == '(id)'").first else { return } 50 51 try! realm.write() { 52 realm.delete(item) 53 } 54 } 55} 56 57class Item: Object, Identifiable { 58 @objc dynamic var id = NSUUID().uuidString 59 @objc dynamic var title = "" 60 @objc dynamic var createdAt = NSDate() 61 62 override static func primaryKey() -> String? { 63 return "id" 64 } 65}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。