Search code examples
iosswiftstringvar

Can't get the value of a var in another class


I'm trying to get the value of a String var from an another class, but when i'm using it on the new class, the value is empty. I've got the MainViewController.swift class with :

    var movieIDSelected = String()

@IBAction func tapPosterButton(_ sender: UIButton) {
    switch sender.tag
    {
    case 101: movieIDSelected = theaterMovieID[0]
    print(movieIDSelected) //The value isn't empty
        break
    }
  }

And the second MovieViewController.swift class with :

var HomeView = ViewPop()

override func viewDidLoad() {
    super.viewDidLoad()

    let movieID = HomeView.movieIDSelected
    print(movieID) //The value is empty
}

Solution

  • With your current code try this in MainVC

    if let home = UIApplication.shared.keyWindow?.rootViewController as? ViewPop {
       print("home exists ",home.movieIDSelected)
    }
    

    //

    but you should have only 1 segue to the destinationVC and link it to the VC not a segue for every button , then implement prepareForSegue and fire performSegue inside the button action to make the segue

    //

    @IBAction func tapPosterButton(_ sender: UIButton) {
        switch sender.tag
        {
           case 101: movieIDSelected = theaterMovieID[0]
            print(movieIDSelected) //The value isn't empty
            self.performSegue(withIdentifier: "goToNext", sender:1)
    
            break
        }
    }
    

    //

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    
          let des = segue.destination as! MovieViewController
    
          des.sendedValue = self.movieIDSelected
    
          des.buttonNumber = sender as! Int
    
    }
    

    //

    class MovieViewController : UIViewController {
    
         var sendedValue = ""
    
        var buttonNumber = 0 // default value won't affect 
    }