Hey guys,
Just hading some trouble updating my app data from my main screen picker. I have included the data structure and also the period and picker swift for review but the error which I am getting is on the MainView where I have:
PeriodPicker(selection: $data.mainFrequency)
.onChange( of: data.mainFrequency, perform: main.update(from: newPeriodData))
which is giving me an error: Cannot convert value of type ‘()’ to expected type ‘(Period) → Void’.
Any help here would be awesome. Thanks
import SwiftUI
struct MainView: View {
@Binding var data: MainDetails.Data
@Binding var main: MainDetails
@Binding var income: [IncomeDetails]
@State private var newPeriodData = MainDetails.Data()
var period = ["Annually", "Quarterly", "Monthly", "Fortnightly", "Weekly", "Daily"]
@State var selectedPeriod = "Annually"
var body: some View {
ZStack {
VStack{
HStack {
Image("abacus")
.aspectRatio(contentMode: .fit)
.padding(.bottom)
Text("Budget Planner")
.font(.title)
}
Spacer()
List {
PeriodPicker(selection: $data.mainFrequency)
.onChange( of: data.mainFrequency, perform: main.update(from: newPeriodData))
NavigationLink(destination: IncomeView(income: $income)) {
MainIncomeView(data: $data, income: income) }
NavigationLink(destination: IncomeView(income: $income)) {
MainIncomeView(data: $data, income: income) }
}
MainResultView()
Spacer()
}
.environment(\.colorScheme, .dark)
}
.background(.black)
}
}
struct MainView_Previews: PreviewProvider {
static var previews: some View {
NavigationView {
MainView(data: .constant(MainDetails.sampledata[0].data),main: .constant(MainDetails.sampledata[0]), income: .constant(IncomeDetails.sampledata))
}
}
}
import SwiftUI
enum Period: String, CaseIterable, Identifiable, Codable {
case Daily
case Weekly
case Fortnightly
case Monthly
case Quarterly
case Annually
var name: String {
rawValue.capitalized
}
var id: String {
name
}
}
import SwiftUI
struct PeriodPicker: View {
@Binding var selection: Period
var body: some View {
Picker("Frequency", selection: $selection) {
ForEach(Period.allCases) {
period in
PeriodView(period: period)
.tag(period)
.environment(\.colorScheme, .dark)
}
.environment(\.colorScheme, .dark)
}
.environment(\.colorScheme, .dark)
}
}
struct PeriodPicker_Previews: PreviewProvider {
static var previews: some View {
PeriodPicker(selection: .constant(.Weekly))
.environment(\.colorScheme, .dark)
}
}
import SwiftUI
struct PeriodView: View {
let period: Period
var body: some View {
ZStack {
Label(period.name, systemImage: "calendar")
.padding(4)
.fixedSize(horizontal: false, vertical: true)
.environment(\.colorScheme, .dark)
}
.environment(\.colorScheme, .dark)
}
}
struct ThemeView_Previews: PreviewProvider {
static var previews: some View {
PeriodView(period: .Weekly)
}
}