如何在使用第三方 ViewController/class 时将整个 Swift class 实例传递给另一个 class?

How to pass entire Swift class instance to another class, while using a third party ViewController/class?

我有一个名为 ViewController 的 class(初始视图控制器),它具有各种属性。我试图将这些属性的相同唯一实例传递到另一个视图控制器(以编程方式),同时在不同的第三方视图 controller/class 中,并且没有从初始 ViewController 传递数据的直接 Segue。

class ViewController: UIViewController
{
    var X:string
    var dataDelegate:DataServiceDelegate?
    var Z: [String]=[]
}

我想将 ViewController 的整个 class 实例传递给另一个 class,称为 ClassZ,以便 XdataDelegateZ 在两个 class 中是相同的。

但是,到 ClassZ 的 Segue 是在第三方 class 中以编程方式调用的,称为 ClassY。因此,我必须能够 在 ClassY 或 Class Z 没有来自 ViewController.

的直接 Segue

我已经为 ClassY 尝试了以下操作,其中我首先尝试创建一个指向先前创建的 ViewController 实例的指针,然后将其传递给 Class Z 以编程方式。请注意,ViewController class 的故事板 ID 是 mainView:

class ClassY: UIViewController 
{
    let storyBoard = UIStoryboard(name: "Main", bundle: nil)

    lazy var viewControllerPointer: ViewController  = {
        return self.storyBoard.instantiateViewControllerWithIdentifier("mainView") as! ViewController
    }()

//code goes here


    func performViewSwitchToClassZ(){
        let ClassZ:ClassZ = storyboard!.instantiateViewControllerWithIdentifier("MainStoryBoard") as! ClassZ

        ClassZ.x=channelNumber
        ClassZ.viewController = viewControllerPointer
        presentViewController(ClassZ, animated: true, completion: nil)
    }
}

但是,当调用到 ClassZ 的 segue 并加载 ClassZ 时,它最终会 创建 ViewController 的新实例(即 "viewControllerPointer" 在 ClassY) 中引用。这是一个问题,因为我想使用相同的 ViewController 实例,以便 ViewController 和 ClassZ 最终修改相同的数据。

我不知道这是否是正确的做法,但我希望它可以解决您的问题,使用变量 viewController 的静态实例创建另一个 class,如下所示:

import UIKit

class DataStore {
 static var controller: UIViewController?
 }

然后将viewController的实例存储在控制器变量中如下ViewController class:

 DataStore.controller = self

稍后在 class Z 中,您可以按如下方式访问视图控制器实例:

DataStore.controller