Passing data to destination means sending information from one screen to another in your app. This helps screens show the right details based on what the user did before.
Passing data to destination in iOS Swift
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "showDetail" { let destinationVC = segue.destination as! DetailViewController destinationVC.data = someData } }
This method runs before the screen changes, so you can set data on the new screen.
Make sure to set the segue identifier in your storyboard to match the code.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "showProfile" { let profileVC = segue.destination as! ProfileViewController profileVC.username = "Alice" } }
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "showItem" { let itemVC = segue.destination as! ItemViewController if let selectedItem = sender as? Item { itemVC.item = selectedItem } } }
This example shows a Master screen that passes a color name to a Detail screen. When the button is tapped, the app moves to the Detail screen and shows the selected color.
import UIKit class MasterViewController: UIViewController { var selectedColor: String = "Blue" override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "showColorDetail" { let detailVC = segue.destination as! DetailViewController detailVC.colorName = selectedColor } } @IBAction func showDetailTapped(_ sender: UIButton) { performSegue(withIdentifier: "showColorDetail", sender: nil) } } class DetailViewController: UIViewController { var colorName: String? override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white let label = UILabel() label.text = "Selected color: \(colorName ?? \"None\")" label.textAlignment = .center label.frame = view.bounds view.addSubview(label) } }
Always check the segue identifier to avoid passing data to the wrong screen.
Use optional binding to safely unwrap data when needed.
Remember to set the destination screen's properties before the transition happens.
Passing data lets screens share information to show relevant content.
Use prepare(for:sender:) to set data on the destination screen before navigation.
Check segue identifiers and safely unwrap data to avoid crashes.