从任何ViewController访问类变量

时间:2018-01-30 15:08:11

标签: swift delegates nsnotification

我的应用程序有这个结构:

  • 我有一个存储多个 Patient()的Realm DB。

  • 带有两个孩子的
  • TabViewController SearchViewController DetailViewController

  • SearchViewController 中有一个 TableView

  • 我可以在TableView 中选择多个患者 - 患者() - 并将其存储在此变量内的同一个SearchViewController 中:var chosenPatient = ChosenPatient() < / p>

ChosenPatient类来自ModelController:

class ChosenPatient: NSObject {
    var data = Patient()
    { ... multiple functions ... }    
}

我在SearchViewController的updateLabels()中需要的只是访问:

label.stringValue = chosenPatient.data.name/lastName/age etc

但是我想在我的DetailsViewController中做同样的事情。我只想要一个函数updateLabels()来检索我在SearchViewController中选择的 SAME 患者,并访问患者拥有的所有信息。

我已经阅读过有关NSNotifications,Delegates和Segues的内容,但我找不到可以适应我的应用方案的良好解释方法。

我希望拥有一个具有唯一Patient()的GLOBAL变量,并以简单明了的方式从任何ViewController访问patient.data。

问候:)

[使用XCODE 8.3,swift 3.2,适用于macOS的应用程序]

2 个答案:

答案 0 :(得分:0)

如果它是一对一的关系,我通常会使用协议委托模式。除非绝对必要,否则你不想保留任何全局变量。

为您的UITabBarController制作自定义课程,并将SearchViewController分配给DetailViewController数据源。

protocol ChosenPatientDataSource: class {
    var chosenPatient: ChoosenPatient { get }
}

class SearchViewController: UITableViewController, ChosenPatientDataSource {
    var chosenPatient = ChosenPatient()
}

class DetailViewController: UIViewController {
    weak var dataSource: ChosenPatientDataSource?

    func useChosenPatient() {
        let chosenPatient = dataSource?.chosenPatient
        ...
    }
}

希望能得到一些帮助!

答案 1 :(得分:0)

要在不同标签中的观看次数之间传递信息,例如SearchViewControllerDetailViewController,我会使用NSNotification

我强烈反对用大量通知填充你的应用程序的诱惑,因为它很快就会让代码很难理解。