ios - 快速在 View Controller 之间通过引用传递数组

标签 ios swift pass-by-reference

使用 Objective-C 时,我只需在 中分配一个属性,即可将 NSMutableArray 从一个 View Controller VC_A 传递到另一个 VC_B >VC_B

VC_B.list = self.list

其中 self 是 VC_A

当 View Controller 从导航堆栈中弹出时,它允许在 VC_B 中对列表进行的更改可以在 VC_A 的列表中看到。

然而,在 Swift 中,由于数组是按值传递的,因此上面的分配不起作用,所以我陷入了如何解决这个问题的困境。现在处理这个问题的正确方法是什么?

最佳答案

您仍然可以在 Swift 中通过将属性设置为 NSMutableArray 来实现此目的,就像以前一样。如果您需要的话,基础类型仍然存在。但这在 ObjC 和 Swift 中都是糟糕的设计。它会在远处创建令人毛骨悚然的 Action (当事情神奇地改变不属于调用一部分的值时),并且可能会破坏 MVC(如果数据是持久的,它应该存在于模型中,而不是 View Controller 中)。

Cocoa 中有两种常见的模式:将数据存储在模型中,或者通过委托(delegate)传递数据。

如果这个数组表示某种持久状态(例如系统中的项目列表),那么它属于模型层,并且两个 View Controller 都应该在那里读取和操作它,而不是通过彼此通信。 (参见Model-View-Controller。)

如果这个数组是暂时的数据(例如从列表中选择),那么调用 VC 应该将自己设置为接收 VC 的委托(delegate),并且当接收 VC 完成时,它应该将数据传递回它的代表。 (参见Delegates and Data Sources。)

关于ios - 快速在 View Controller 之间通过引用传递数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32049202/

相关文章:

ios - 新 iOS 7 模拟器中的登录弹出错误无法验证用户凭据

ios - 如何在 iOS 应用程序中获取汉堡包图标

objective-c - iPhone 项目默认为 iPad View Controller

swift - 生成相同类型类的 SequenceType 数组的类型是什么

swift - 如何打开从所有 View Controller 打开的 'LGSideMenuController' 侧边菜单?

java - 为什么局部非最终变量会影响引用的字段? java

ios - 向游戏中的移动物体发射弹丸

ios - Firebase 类型 'AppDelegate' 不符合协议(protocol) 'FUIAuthDelegate'

java - 有人能解释一下 java 是如何仅在以下情况下按值传递的吗

c# - 检查引用参数值或返回 bool 值?