gpt4 book ai didi

ios - iOS 版 Swift 中父子 Controller 之间的共享模型

转载 作者:行者123 更新时间:2023-11-28 06:07:28 25 4
gpt4 key购买 nike

我有一个 viewController,父级(或容器)作为属性还有两个 viewController,一个是 listViewController,另一个是 elementViewController

“模型”,在本例中是一个对象数组 [Element],并在使用 listViewController.model = modelelementViewController.model = 模型

在 listViewController 中,我有一个按钮可以执行向数组添加新元素的操作,所以它会执行类似以下操作:model.append(Element()) 然后折叠当前 View 并在其委托(delegate)上执行,即 containerViewController showElement(forIndex:) 作为索引 model.count-1 以获取索引添加的最后一个元素。

此方法调用子 elementViewControllershowElement(forIndex:) 方法,该方法应该显示 model[index] 元素通过索引传递,但是当执行后一个函数时,索引似乎超出了范围,原因是父 Controller 上的模型没有更新,因为数组是按值传递的(调试器确认了这一点,在 containerviewController 中少显示一个元素。

临时解决方案是将更新的数组传递给 showElement 方法,并替换父模型,但我不喜欢它。

我宁愿使用的选项是将数组作为引用而不是值传递给模型,这样当一个元素被添加到 containerViewControllerelementViewController 自动同步。

我的理论实现有什么缺点吗?如果没有,我将如何实现这一目标?

是否将数组包装在 elementsCollection 类中,以便将其作为引用传递给子模型,这是一种干净的方法,还是我应该尝试找到一个完全不同的解决方案?

TL;DR 将数组包装在类中以将模型作为对 subview Controller 的引用传递是否合理?

最佳答案

struct 的实例保持独立。 的实例是共享的。 Array 是一个struct

我认为获得所需内容的最简单方法是将数组包装在一个类中。

class MyModel {
var elements: [Element] = []
}

让所有的 View Controller 共享一个 MyModel 的实例。他们可以随心所欲地修改 elements,并将与其他 View Controller 共享。

关于ios - iOS 版 Swift 中父子 Controller 之间的共享模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47816261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com