I'm new to IOS and SwiftUI coding. I googled a lot but could not find a solution, how to pass a computed variable to the next view. Here snippets of what I have:
import SwiftUI
struct ContentView: View {
@State private var isShowingResultView = false
@State private var netRate = "0"
@State var daysMonth = "0"
@State var hoursWeek: String = "0"
@State var daysOnsite: String = "0"
@State var ticketCost: String = "0"
@State var hotelCost: String = "0"
@State var otherCost: String = "0"
//@State var travellCostResult: Double = 0.00
var travellCostPerHour: Double{
get {
let daysMonthNbr = Int(daysMonth) ?? 0
let hoursWeekNbr = Int(hoursWeek) ?? 0
let daysOnsiteNbr = Int(daysOnsite) ?? 0
let ticketCostNbr = Double(ticketCost) ?? 0
let hotelCostNbr = Double(hotelCost) ?? 0
let otherCostNbr = Double(otherCost) ?? 0
let travellCostPerWeek = (ticketCostNbr + (Double((daysOnsiteNbr-1))*hotelCostNbr)+otherCostNbr)
let travellCostPerHour: Double = Double(travellCostPerWeek) / Double(hoursWeekNbr)
return travellCostPerHour.isNaN ? 0 : travellCostPerHour
}
}
.
.
.
var body: some View {
HStack {
NavigationLink("Calculate", destination: ResultView(netRate: self.$netRate, travellCostPerHour: travellCostPerHour), isActive: $isShowingResultView).navigationBarTitle("Result").buttonStyle(GradientButtonStyle())
.adaptToKeyboard()
}
struct ResultView: View {
@Binding var netRate: String
@Binding var travellCostPerHour: Double
.
.
.
struct ResultView_Previews: PreviewProvider {
@State static var netRate: String = ""
@State static var travellCostPerHour: Double = 0.00
static var previews: some View {
ResultView(netRate: $netRate, travellCostPerHour: $travellCostPerHour )
}
}
I get this error msg in the navigationLink for travellCostPerHour: Cannot convert value of type 'Double' to expected argument type 'Binding' Can one put me on the right path here please?
If it is computed property then binding is not needed, pass it as-is
struct ResultView: View {
@Binding var netRate: String
var travellCostPerHour: Double // << just regular
// .. other code