代码之家  ›  专栏  ›  技术社区  ›  alionthego

在prepare中,如何通过viewControllers之间的引用传递swift数组(对于segue:?

  •  0
  • alionthego  · 技术社区  · 6 年前

    我知道swift数组结构是按值复制的,而不是按引用复制的。有没有一个简单的方法,我可以投或通过引用传递数组在我的准备(为segue:。。。方法,以便我可以将对数组的引用从viewController a传递到viewController B?

    我已经看到一些涉及到将数组传递给函数的答案,但我只想将其传递给其他viewControllers

    5 回复  |  直到 6 年前
        1
  •  1
  •   shio    6 年前

    为数组创建包装类,然后在需要的任何位置传递该类引用:

    class ArrayWrapper {
        let array: [YourType]
    
        init(array: [YourType]) {
            self.array = array
        }
    }
    
        2
  •  0
  •   Nancy Madan    6 年前

    是的,您可以通过将值从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。

        3
  •  0
  •   Jhony    6 年前

    如果您想使用第一个控制器中的segue create array将数组从一个控制器传输到另一个控制器,如下所示

     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] = []
    

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

        4
  •  0
  •   farshad jahanmanesh    6 年前

    创建这样的全局数组

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

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

        5
  •  0
  •   congsun    6 年前

    如果你把数组投到NSArray中,它应该能完成任务。