如何在准备中的 viewController 之间通过引用传递 swift 数组(对于 segue:?

how can I pass a swift array by reference between viewControllers in prepare(for segue:?

我知道 swift 数组结构是按值而不是引用复制的。有没有一种简单的方法可以在我的 prepare(for segue:... 方法中通过引用转换或以其他方式传递数组,以便我可以将对数组的引用从 viewController A 传递到 viewController B?

我看到一些答案提到将数组传递给函数,但我只是想将它传递给其他 viewControllers

为您的数组创建包装器 class,然后将 class 引用传递到任何您想要的地方:

class ArrayWrapper {
    let array: [YourType]

    init(array: [YourType]) {
        self.array = array
    }
}

是的,您可以通过将值从 viewController A 传递到 viewController B 来实现它。您需要做的就是在 ViewController B 中获取一个数组 (arrB)。

let VB = self.storyboard?.instantiateViewController(withIdentifier: "viewControllerB") as! viewControllerB
vc.arrA = arrA
 self.navigationController?.pushViewController(vc, animated: true)

这不会将引用传递给 arrB,而是将区域的值传递给 arrB。

如果你想使用 segue 将数组从一个控制器传输到另一个控制器,在你的第一个控制器中创建数组,就像这样

 var dataSource : [ANY MODEL CLASS] = []

使用此方法通过 segue 传输您的数据

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if (segue.identifier == "YOURSEGUE") {
            let vc = segue.destination as! YOUCONTROLLER
             vc.myArray = self.dataSource
        }

在你的第二个控制器中创建相同类型的数组

  var myArray : [ANY MODEL CLASS] = []

所以现在当你使用这个 "YOURSEGUE" segue 移动到另一个控制器时,你的数组将有数据

像这样创建一个全局数组

var myGlobalArray = [Int]()
class viewControllerA : UIViewController {

}

现在您可以在任何地方使用它。但这可不是什么好事

如果将数组转换为 NSArray,它应该可以完成工作。