Buttons for page

import SwiftUI

var weapons = ["lightsabre", "gun", "sword", "dagger", "metal stick"]
var weapon:String = "fist"
var diamonds:Int = 0
var jailtime:Int = 5
var gun:Int = 0
var vault:Int = 0
var goojfc:Int = 0
var health:Int = 50
var page:String = "main"

struct main: View {
  var body: some View {
    Text("Welcome to Diamond Risk!" + page)
    Button("Play"){
      page = "play"
    }
    Button("Rules"){
      page = "rules"
    }
  }
}

struct rules: View {
  var body: some View {
    Text("Welcome to Diamond Risk!")
    Button("Home Page"){
      page = "main"
    }
    Button("Play"){
      page = "play"
    }
  }
}
struct ContentView: View {
  var body: some View {
    Text(page)
    if (page == "main") {
      main()
    } else if (page == "rules") {
      rules()
    }
  }
}

struct ContentView_Previews: PreviewProvider {
  static var previews: some View {
    ContentView()
  }
}

I used this exact code for a project before, and it worked fine. But now the variable page is just not changing. How do I fix it so it works and changes?

Answered by Claude31 in 712550022

I would be surprised it ever worked. You need to have a State var in ContrentView and Bindings in other views for the page var.

I tested this:

var weapons = ["lightsabre", "gun", "sword", "dagger", "metal stick"]
var weapon:String = "fist"
var diamonds:Int = 0
var jailtime:Int = 5
var gun:Int = 0
var vault:Int = 0
var goojfc:Int = 0
var health:Int = 50
//var page:String = "main"

struct main: View {
    @Binding var page: String
    var body: some View {
        Text("Welcome to Diamond Risk!" + page)
        Button("Play"){
            page = "play"
        }
        Button("Rules"){
            page = "rules"
        }
    }
}

struct rules: View {
    @Binding var page: String
    var body: some View {
        Text("Welcome to Diamond Risk!")
        Button("Home Page"){
            page = "main"
        }
        Button("Play"){
            page = "play"
        }
    }
}
struct ContentView: View {
    @State var page: String = "main"
    
    var body: some View {
        Text(page)
        if (page == "main") {
            main(page: $page)
        } else if (page == "rules") {
            rules(page: $page)
        }
    }
}

Accepted Answer

I would be surprised it ever worked. You need to have a State var in ContrentView and Bindings in other views for the page var.

I tested this:

var weapons = ["lightsabre", "gun", "sword", "dagger", "metal stick"]
var weapon:String = "fist"
var diamonds:Int = 0
var jailtime:Int = 5
var gun:Int = 0
var vault:Int = 0
var goojfc:Int = 0
var health:Int = 50
//var page:String = "main"

struct main: View {
    @Binding var page: String
    var body: some View {
        Text("Welcome to Diamond Risk!" + page)
        Button("Play"){
            page = "play"
        }
        Button("Rules"){
            page = "rules"
        }
    }
}

struct rules: View {
    @Binding var page: String
    var body: some View {
        Text("Welcome to Diamond Risk!")
        Button("Home Page"){
            page = "main"
        }
        Button("Play"){
            page = "play"
        }
    }
}
struct ContentView: View {
    @State var page: String = "main"
    
    var body: some View {
        Text(page)
        if (page == "main") {
            main(page: $page)
        } else if (page == "rules") {
            rules(page: $page)
        }
    }
}

Buttons for page
 
 
Q