在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 }