如何在 segue 之间传递值

How to Pass values in between segues

所以我有 2 个视图控制器,我想在它们之间传递值并具有以下代码

@IBAction func analysisButton(_ sender: Any) {
    if expensesRecieved.count > 0{
        let categoryAnalysisController = storyboard?.instantiateViewController(withIdentifier: "CategoryVC") as! CategoryAnalysis
        //            var categoryAnalysisController: CategoryAnalysis = CategoryAnalysis(nibName: nil, bundle: nil)
        categoryAnalysisController.collection = collectionDisplayed.text
        self.performSegue(withIdentifier: "categoryAnalysis", sender:(Any).self)
    }

我想做的是,如果 expensesRecieved 的计数大于 0,则执行 segue 并传递该值,如果不是,则发出警报,什么都不做。

过去我使用过prepareSegue方法,但从来没有这样做过。我尝试了几种方法,一种是这样的,其中 none 行得通。请帮忙!

试试这个:

@IBAction func analysisButton(_ sender: Any) {
    if expensesRecieved.count > 0 {
        self.performSegue(withIdentifier: "categoryAnalysis", sender: nil)
    }
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "categoryAnalysis" {
        guard let viewController = segue.destination as? YourViewController else { return }
        viewController.expensesReceived = self.expencesReceived
    } else {
        super.prepare(for: segue, sender: sender)
    }
}

假设您在目标视图控制器中有一个名为 "data_from_last_viewcontroller" 的全局变量,您可以覆盖此方法并执行类似的操作,

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

 if segue.identifier == "categoryAnalysis" 
 {
    if let dist = segue.destination as? YOURNEXTVIEWCONTROLLER
    {
         dest.data_from_last_viewcontroller = YOUR_DATA_TO_PASS_HERE  
    }
 }
}

这里发生了什么

每次 segue 即将执行时都会调用此方法,在您的情况下,就在 performSegue 行之后。 它采用目标 Viewcontroller 并像这样设置目标 ViewController 的值,以便在新的 viewcontroller 启动时准备就绪。