Keeping a view controller in it's state after you leave and come back to it- Swift

723 Views Asked by At

Right now I have two view controllers, and when I gather data from my second view controller I display it in a label in my first view controller (a random integer):

var FirstInteger = //random integer

override func viewDidLoad() {
    super.viewDidLoad()

    TotalAmount.text = String(FirstInteger)

This works fine, but when the user goes back to the second view controller and gets a new random integer, I want to add this integer to the first one gathered, however many times the user goes back to the second view controller and "gets" a new integer- so I decided to do something like this:

var FirstInteger = //random integer
var NewInteger = 0    

override func viewDidLoad() {
    super.viewDidLoad()
    TotalAmount.text = String(FirstInteger + NewInteger)
    NewInteger = FirstInteger + NewInteger

But I know this doesn't work, since everytime the user would go back to the first view controller, it would reset the NewInteger's value to 0- does anyone know how I could fix this?

2

There are 2 best solutions below

1
On BEST ANSWER

You need to declare the NewInteger as static something like this

class MyClass 
{
    static var NewInteger = 0
}

This will create only one variable newInteger which will be at class level (or Type level as SWIFT calls it) you should be able to access it like this in your code

MyClass.NewInteger = FirstInteger + MyClass.NewInteger

Read through this for more details on the variable types and their life cycles in SWIFT

Type Properties

0
On

Instead of having the second view controller generate a random number, let the first view controller generate the number, and pass it to the second view controller.

If you're using storyboards, you can use prepareForSegue method to pass a variable to a destination view controller.

var firstInteger = 0
var randomInteger = 0   

var total = 0
override func viewDidLoad() {
    super.viewDidLoad()

    // Generate random number assuming you have this function
    randomInteger = generateRandomNumber()

    total = firstInteger + randomInteger
    firstInteger = randomInteger
}

// Then pass total variable to your second view controller

```