首页 > 解决方案 > 在两个单独的类中使用一个对象的最佳方法是什么?

问题描述

这是一个理论问题。假设我有 3 个课程:

ParentViewController我有一个对象

let myObject = MyObject()

我从网上获取这个对象的数据。

  networkHelper.fetchData { [weak self] image, text in 
    self?.myObject.image = image
    self?.myObject.text = text
  }

然后我想同时使用myObjectinFirstViewController和 in SecondViewController

我看到几个可能的选择:

什么是最好的?

标签: swift

解决方案


有多种方法可以将数据从RootViewController转发到其ChildViewControllers

但既然你提到了 4 个可能的选项,我们必须从这四个选项中找到最好的。

  1. 辛格尔顿

它主要用作全局实例。它的使用被视为一种不好的做法。因为我们应该在代码中隐藏应用程序的依赖关系,而不是通过接口暴露它们。

它们本质上会导致代码紧密耦合。在许多情况下,这使得在测试中伪造它们相当困难。

它们在应用程序的生命周期内携带状态。

  1. 在两个儿童班级中建立网络

这是一项非常昂贵的任务。如果我们只需一次网络调用就可以解决我们的问题,那么就没有必要再做两次了。

  1. prepareToSegue

这是从 RootViewController 向 ChildViewController 传递数据的最佳选择之一。它不需要任何额外的计算。

您只需在您的FirstViewControllerSecondViewController中声明您的 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
    }
}

推荐阅读