Good evening. I am trying to add code to save and sort favorites in a List. Unfortunately I can’t figure out the error I get withAnimation. I believe it has to do with explicit operations but I am new to this and can’t figure it out. Thanks for any help or guidance to continue my studies.
Error: cannot find ‘withAnimation’ in scope.
import Foundation
extension MyFlightView {
final class MyFlightViewModel: ObservableObject {
@Published var items = [Title]()
@Published var showingFavs = false
@Published var savedItems: Set<Int> = [1]
var filteredItems: [Title] {
if showingFavs {
return items.filter { savedItems.contains($0.ids)}
} else {
return items
}
}
private var db = Database()
init() {
//self.savedItems = db.load()
self.items = items
}
func sortFavs() {
withAnimation() {
showingFavs.toggle()
}
}
func contains(_ item: Title) -> Bool {
savedItems.contains(item.ids)
}
func toggleFav(item: Title) {
if contains(item) {
savedItems.remove(item.ids)
} else {
savedItems.insert(item.ids)
}
db.save(items: savedItems)
}
}
}
import SwiftUI
struct MyFlightView: View {
//reference the view model
@ObservedObject var model = TitleModel()
@StateObject private var vm = MyFlightViewModel()
var body: some View {
VStack {
Button("Toggle Favorites", action: vm.sortFavs)
.padding()
}
NavigationView {
List {
ForEach(model.titles) { item in
NavigationLink(destination: DetailView(detail: item),
label: {
HStack(spacing: 20.0) {
Image(item.image1)
.resizable()
.scaledToFill()
.frame (width: 50, height: 50, alignment: .center)
.clipped()
.cornerRadius(5)
Text(item.title)
Spacer()
Image(systemName: vm.contains(item) ?
"star.fill" : "star")
.foregroundColor(.yellow)
.onTapGesture {
vm.toggleFav(item: item)
}
}
.cornerRadius(10)
})
}
.onMove(perform: move)
}
.toolbar {
EditButton()
Text("Move")
}
.navigationBarTitle("MyFlight")
}
}
func move(from source:IndexSet, to destination: Int) {
(model.titles).move(fromOffsets: source, toOffset: destination)
}
}
struct MyFlightView_Previews: PreviewProvider {
static var previews: some View {
MyFlightView()
}
}