从Swift中的另一个ViewController访问变量

fuz*_*uzz 24 objective-c ios uipageviewcontroller swift

我有以下内容ViewController:

class PageContentViewController: UIViewController {

    var pageIndex: Int

}
Run Code Online (Sandbox Code Playgroud)

我如何pageIndex从另一个ViewController 访问?

我需要访问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?
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*ike 21

默认情况下,swift中的所有内容都是公共的,因此如果您声明这样的内容:

class SomeViewController: UIViewController {
    var someVariable: SomeType = someValue

    init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    }
}
Run Code Online (Sandbox Code Playgroud)

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

var myCustomViewController: SomeViewController = SomeViewController(nibName: nil, bundle: nil)
var getThatValue = myCustomViewController.someVariable
Run Code Online (Sandbox Code Playgroud)

  • @BryanChen:通过各种方式,告诉我们如何正确访问变量. (3认同)
  • 这不是使用全局变量的正当理由.如果你有多个`PageContentViewController实例?会发生什么? (2认同)

Sab*_*odi 9

ViewController1.swift

class ViewController1: UIViewController {

    struct GlobalVariable{
        static var myString = String()
    }
}
Run Code Online (Sandbox Code Playgroud)

ViewController2.swift

class ViewController2: UIViewController 
{

print(ViewController1.GlobalVariable.myString)

}
Run Code Online (Sandbox Code Playgroud)


roy*_*roy 5

我解决了这种方式。。

class StaticLinker
{
     static var viewController : PageContentViewController? = nil
}

class PageContentViewController: UIViewController
{

    var pageIndex: Int
    StaticLinker.viewController = self
}

class AnotherClass
{
    StaticLinker.viewController.pageIndex = 100
}
Run Code Online (Sandbox Code Playgroud)