如何在没有 segue 的情况下传递数组?

How do I pass an array without a segue?

我有一系列的 VC。有一个 restaurantMenuTableVC 嵌入在 navigationVC 中。当用户将项目添加到以模态方式打开的 shoppingCartVC 中时,我需要将购物车项目数组发送到需要推送的 paymentVC(未以模态方式显示)。所以我正在做的是关闭购物车并尝试推动支付屏幕,但没有任何效果。这是我尝试过的:

方法 1(使用简单委托):我关闭购物车,然后从 restaurantMenuVC 转至 paymentVC:

@IBAction func didTapNext(_ sender: UIButton) {

        dismiss(animated: true)
        delegate?.payNow()
}

在 menuVC 的委托函数中我有这个:

func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if let paymentViewController = segue.destination as? PaymentViewController {
                paymentViewController.cartItemArray = self.cartItemArray
            }
        }

发生的只是购物车模式被关闭但 paymentVC 没有打开。

方法2:在委托函数中,我有这个:

let paymentViewController = self.storyboard?.instantiateViewController(identifier: "PaymentViewController") as? PaymentViewController
        self.navigationController?.pushViewController(paymentViewController!, animated: true)

这可行,但我无法传递数组,因为没有 segue。

我不能简单地从 shoppingCartVC 转到 paymentVC,因为它以模态方式打开 paymentVC。我也不能推它,因为它会因为某种原因被推两次。它的 UX 需要关闭 shoppingCartVC,然后过渡到 paymentVC。

我该怎么办?

如果你想在关闭另一个场景后呈现一个场景,请使用 dismiss 的完成处理程序:

dismiss(animated: true) {
    delegate?.payNow()
}

顺便说一句,如果你想在手动推送时传递数据,请在实例化视图控制器之后,推送之前设置值:

paymentViewController = storyboard!.instantiateViewController(identifier: "PaymentViewController") as! PaymentViewController
paymentViewController.property = ...
navigationController?.pushViewController(paymentViewController, animated: true)

当您手动调用 pushViewController 时,不会调用 prepare(for:sender:)