【问题标题】:Pass data between two classes in two files在两个文件中的两个类之间传递数据
【发布时间】:2016-01-02 02:37:41
【问题描述】:

我有两个 swift 文件。一个文件有一个包含一些数据的变量。我需要从另一个类中使用该变量中的数据。

A类

class HVListConnectionsRequest: HVRequest {

    var connections = [HVConnection]()
    //Some code
}

B类

class HVListConnectionsController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }
}

请告诉我如何在 B 类的 connections 变量中打印数据。

我没有使用故事板,我使用的是 XIB 文件和 MVC 设计模式,所以请告诉我如何在不使用 segues 的情况下做到这一点。

【问题讨论】:

  • 全局变量?或者可能是一个结构,其中包含你需要的所有变量
  • @LeoDabus 我不能将其用作静态变量,因为我正在将数据附加到实例上的连接
  • 您可以随时添加 willSet 并在更改其值之前执行任何您需要的操作stackoverflow.com/a/34486265/2303865
  • 除了上面的 Leo:s 提示之外,可能使用自定义协议在从 HV 类到视图控制器中的某个委托对象之间进行委托回调(可能使用 Leo 提到的属性观察器进行回调,例如将设置)。参见例如andrewcbancroft.com/2015/04/08/…
  • 你应该在 B 类中创建一个新的 var 在 A 类中创建你的 B 类的一个实例,然后设置它(在推送或呈现之前)

标签: ios swift segue xib


【解决方案1】:

我有两个 swift 文件。一个文件有一个包含一些数据的变量。我需要从另一个类中使用该变量中的数据。

你真正想做的是在另一个对象中使用数据。 connectionsHVListConnectionsRequest 的属性,因此HVListConnectionsRequest 的每个实例都有自己的connections 值。

在对象之间移动数据是面向对象编程中的一项基本任务,并且这样做需要一个对象引用另一个对象。在这种情况下,您需要您的HVListConnectionsController 对象以某种方式获取对您关心的HVListConnectionsRequest 实例的引用。有很多方法可以做到这一点,例如:

  • HVListConnectionsController 可以创建一个新的HVListConnectionsRequest

  • 其他一些对象可以将HVListConnectionsRequest 对象赋予HVListConnectionsController

  • HVListConnectionsController 可以从某个众所周知的位置或对象获取HVListConnectionsRequest

一旦你的HVListConnectionsController 引用了HVListConnectionsRequest,那么获取它的connections 属性显然很简单。例如,如果someRequest 指向连接请求:

let myConnections = someConnectionsRequest.connections

那么,你需要考虑HVListConnectionsRequestHVListConnectionsController之间的关系……HVListConnectionsRequest对象是如何创建的?你说你正在使用MVC; HVListConnectionsRequests 是应用程序数据模型的一部分,如果是,HVListConnectionsController 可以从模型中获取连接请求吗?或者它们可能是由创建HVListConnectionsViewController 的同一个视图控制器创建的,如果是这样,该视图控制器可以在创建“HVListConnectionsViewController”时传递请求吗?

简而言之,如果不了解这些对象是如何在您的应用中创建的,我无法告诉您应用中的一个对象应该如何与另一个对象通信。好消息是我也不需要告诉你...一旦你查看了对象之间的关系,你就可以自己解决这个问题了。

不过,我可以告诉您的一件事是,您最好避免“简单”的解决方案,例如创建单例或将数据存储在用户默认系统中。您正在处理一个非常典型的 OO 设计问题,并且使用用户默认值或让您的应用程序中的所有内容都可以访问其他所有内容,这只是避免了设计问题;结果将是设计不佳的应用程序变得越来越难以运行。

【讨论】:

    【解决方案2】:

    您可以使用 NSUserDefaults 来存储连接数据。而在另一个 B 类上,您可以从 NSUserDefaults 获取连接数据。

    还要了解如何在 NSUserDefaults 中保存和获取价值,请查看answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多