在Swift中从另一个ViewController访问variables

我有以下ViewController

 class PageContentViewController: UIViewController { var pageIndex: Int } 

我如何访问另一个ViewController的pageIndex

我需要在这个函数中访问pageIndex

 func pageViewController(pageViewController: UIPageViewController!, viewControllerBeforeViewController viewController: UIViewController!) -> UIViewController! { //var index: Int //index = ? NSUInteger index = ((PageContentViewController*) viewController).pageIndex; // in Swift? if ((index == 0) || (index == NSNotFound)) { return nil; } index--; return [self viewControllerAtIndex:index]; // in Swift? } 

在swift中默认的所有东西都是公共的,因此如果你声明如下:

 class SomeViewController: UIViewController { var someVariable: SomeType = someValue init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) } } 

只要您有一个实例,就可以访问它:

 var myCustomViewController: SomeViewController = SomeViewController(nibName: nil, bundle: nil) var getThatValue = myCustomViewController.someVariable 

ViewController1.swift

 class ViewController1: UIViewController { struct GlobalVariable{ static var myString = String() } } 

ViewController2.swift

 class ViewController2: UIViewController { print(ViewController1.GlobalVariable.myString) } 

这里是我尝试将该代码转换为swift:

 func pageViewController(pageViewController: UIPageViewController!, viewControllerBeforeViewController viewController: UIViewController!) -> UIViewController! { var pageController = viewController as PageContentViewController var index: Int? = pageController.pageIndex if var idx: Int = index{ if idx == 0{ return nil } else{ idx-- return viewControllerAtIndex(idx) } } else{ return nil } } class PageContentViewController: UIViewController { var pageIndex: Int? } 

我解决了这个问题 。

 class StaticLinker { static var viewController : PageContentViewController? = nil } class PageContentViewController: UIViewController { var pageIndex: Int StaticLinker.viewController = self } class AnotherClass { StaticLinker.viewController.pageIndex = 100 }