如何在使用第三方 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
,以便 X
、dataDelegate
和 Z
在两个 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
我有一个名为 ViewController
的 class(初始视图控制器),它具有各种属性。我试图将这些属性的相同唯一实例传递到另一个视图控制器(以编程方式),同时在不同的第三方视图 controller/class 中,并且没有从初始 ViewController 传递数据的直接 Segue。
class ViewController: UIViewController
{
var X:string
var dataDelegate:DataServiceDelegate?
var Z: [String]=[]
}
我想将 ViewController
的整个 class 实例传递给另一个 class,称为 ClassZ
,以便 X
、dataDelegate
和 Z
在两个 class 中是相同的。
但是,到 ClassZ
的 Segue 是在第三方 class 中以编程方式调用的,称为 ClassY
。因此,我必须能够 在 ClassY 或 Class Z 没有来自 ViewController.
我已经为 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