Ios 视图控制器之间不共享的变量

Ios 视图控制器之间不共享的变量,ios,swift,Ios,Swift,在我的第一个视图控制器中,我有一个通过按下按钮调用的函数 func BuyButton(sender:UIButton) { print("clicked cell is at row \(sender.tag)") let indexPath = NSIndexPath(row: sender.tag, section: 0) let currentCell = tableView.cellForRow(at: indexPath as IndexPath) a

在我的第一个视图控制器中,我有一个通过按下按钮调用的函数

    func BuyButton(sender:UIButton) {
    print("clicked cell is at row \(sender.tag)")
    let indexPath = NSIndexPath(row: sender.tag, section: 0)
    let currentCell = tableView.cellForRow(at: indexPath as IndexPath) as! CustomCell
    let Storyboard = UIStoryboard(name: "Main", bundle: nil)
    let PaymentController = Storyboard.instantiateViewController(withIdentifier: "PaymentViewController") as! PaymentViewController
    print(currentCell.Test.text!) //prints fine here
    PaymentController.RecordTitle = currentCell.Test.text!
    performSegue(withIdentifier: "Buy", sender: self)
}
在付款视图控制器中,我将变量定义为

    var RecordTitle = String()
在我看来,是否加载了我的付款视图控制器,我尝试打印记录标题,但未打印任何内容

    print(RecordTitle)//Nothing prints in payment view controller

我做错了什么?我尝试了多种方法,但似乎都不起作用。

您需要重写
prepare(segue,sender)
方法,并在该方法中获取所需的视图控制器并设置标题

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "Buy" {
        let vc = segue.destination as! PaymentViewController
        vc.RecordTitle = sender as? String
    }
}
另外,不要忘记使用该标题调用
performsgue

performSegue(withIdentifier: "Buy", sender: currentCell.Test.text!)

您可以通过以下两种方法更改viewController: 1:实例化eView控制器 2:性能测试 但是你把它们结合起来了 如果要使用第一种方法,请执行以下操作:

func BuyButton(sender:UIButton) {
    print("clicked cell is at row \(sender.tag)")
    let indexPath = NSIndexPath(row: sender.tag, section: 0)
    let currentCell = tableView.cellForRow(at: indexPath as IndexPath) as! CustomCell
    let Storyboard = UIStoryboard(name: "Main", bundle: nil)
    let PaymentController = Storyboard.instantiateViewController(withIdentifier: "PaymentViewController") as! PaymentViewController
    print(currentCell.Test.text!) //prints fine here
    PaymentController.RecordTitle = currentCell.Test.text!
    self.presentViewController(PaymentController, animated: false, completion: nil)
}
如果您对第二种方法感兴趣,此链接中有一个很好的示例:

@HaydenBowden您是否检查过标题是在
prepare
方法中分配的?在
viewdiload
中,您可以看到
nil
对象?var-RecordTitle=String()的一种更被接受的“快速”方式是var-RecordTitle=“”。尽可能使用Camel case变量并推断类型。