swift - 在两个单独的类中使用一个对象的最佳方法是什么?
问题描述
这是一个理论问题。假设我有 3 个课程:
- 父视图控制器,
- FirstViewController和
- 第二视图控制器。
在ParentViewController
我有一个对象
let myObject = MyObject()
我从网上获取这个对象的数据。
networkHelper.fetchData { [weak self] image, text in
self?.myObject.image = image
self?.myObject.text = text
}
然后我想同时使用myObject
inFirstViewController
和 in SecondViewController
。
我看到几个可能的选择:
-
- 途经
myObject
_prepareToSegue
- 途经
-
- 从任何类创建
singleton
和访问myObject
- 从任何类创建
-
myObject
通过调用从子类中获取parent.myObject
-
- 分别在两个子类中进行联网,以便为 2 个类提供 2 个单独的对象。
什么是最好的?
解决方案
有多种方法可以将数据从RootViewController转发到其ChildViewControllers。
但既然你提到了 4 个可能的选项,我们必须从这四个选项中找到最好的。
- 辛格尔顿
它主要用作全局实例。它的使用被视为一种不好的做法。因为我们应该在代码中隐藏应用程序的依赖关系,而不是通过接口暴露它们。
它们本质上会导致代码紧密耦合。在许多情况下,这使得在测试中伪造它们相当困难。
它们在应用程序的生命周期内携带状态。
- 在两个儿童班级中建立网络
这是一项非常昂贵的任务。如果我们只需一次网络调用就可以解决我们的问题,那么就没有必要再做两次了。
- prepareToSegue
这是从 RootViewController 向 ChildViewController 传递数据的最佳选择之一。它不需要任何额外的计算。
您只需在您的FirstViewController和SecondViewController中声明您的 myObject 变量。在performToSegue中,您必须注入依赖项。
class FirstViewController: UIViewController {
var myObject: MyObject!
}
在RootViewController中的 performToSegue
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
if segue.destination is FirstViewController
{
let vc = segue.destination as? FirstViewController
vc?.myObject = myObject
}
}
推荐阅读
- html - 剪辑路径渐变动画在 Safari 中不起作用
- c - 从c中的CSV文件读取数据
- python - 使用 Spark 将 Hive 数据发送到 Kafka 主题
- c++ - 如何检查 QLlistWidget 中的所有项目?
- c# - UWP 帐户信息权限
- reactjs - 实时跟踪网络地理位置
- vba - 可能知道何时需要凭证
- excel - 如何实现变量并优化以下代码?
- spring - Maven 中缺少的方法:org.springframework.hateoas:spring-hateoas:1.0.0.M3 库 Entitylinks 类
- javascript - 如果数组结束 javascript 从头开始切片