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

Posted

技术标签:

【中文标题】在 Swift 中从另一个 ViewController 访问变量【英文标题】:Accessing variables from another ViewController in Swift 【发布时间】:2014-06-06 01:23:22 【问题描述】:

我有以下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?

【问题讨论】:

这个问题的答案与其他“访问另一个类的变量”问题相同。您需要先获取对象的引用。 (我认为这是一个坏问题) var index: Int = PageContentViewController(viewController).pageIndex 我相信这就是你可以将该行翻译成 Swift 的方式 @BryanChen:你认为还是你知道?现有答案的链接会很棒。一旦你提供了,我很乐意关闭它。 【参考方案1】:

默认情况下,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

【讨论】:

只有类在同一个文件中才有效吗? 这不是使用全局变量的正当理由。如果您有多个 PageContentViewController 实例会怎样? @BryanChen:无论如何,请告诉我们如何正确访问变量。 不,它不需要在同一个文件中,但我会用更好的答案编辑它。 @gotnull 你试过我编辑的解决方案了吗?我认为非常简单。【参考方案2】:

ViewController1.swift

class ViewController1: UIViewController 

    struct GlobalVariable
        static var myString = String()
    

ViewController2.swift

class ViewController2: UIViewController 


print(ViewController1.GlobalVariable.myString)


【讨论】:

令人烦恼的是,即使在 ViewController1 中您也必须调用 GlobalVariable.myString 并且不能只在此处引用 myString。但这适用于在其他视图控制器中引用它。谢谢! 您不需要添加额外的 GlobalVariable 结构。您可以直接在 Viewcontroller1 类中将 myString 设为 static var myString 或 class var myString。然后使用它只需像 print(Viewcontroller1.myString) 一样使用它【参考方案3】:

我是这样解决的。 .

class StaticLinker

     static var viewController : PageContentViewController? = nil


class PageContentViewController: UIViewController


    var pageIndex: Int
    StaticLinker.viewController = self


class AnotherClass

    StaticLinker.viewController.pageIndex = 100

【讨论】:

【参考方案4】:

这是我将该代码转换为 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?


【讨论】:

【参考方案5】:

当我必须在其他所有课程中使用令牌时,我遇到了同样的问题,解决方案非常简单,我所做的是

var access = LoginViewController() 
token = access.token

但它遇到的问题是:使用token的默认值。 所以我将该变量设为静态并在视图中使用它确实加载了。

     var token : String = ""
     var access = LoginViewController.self
     token = access.token

【讨论】:

【参考方案6】:
class color: UIViewController 

    var blue:Int = 90

从其他类访问它(确保在函数中调用变量,否则会出错)

class ViewController: UIViewController
   var example:color = color()


  override func viewDidLoad() 
     super.viewDidLoad()
     // call it here
      print(example.blue)
  

【讨论】:

【参考方案7】:
class firstViewController: UIViewController
var variableName: variableType = variableValue

您可以通过创建 firstViewController() 的实例在 secondViewController 中访问此变量

class secondViewController: UIViewController
var newVariableName = firstViewController()

稍后使用 newVariableName 访问 variableName 的值

newVariableName.variableName

【讨论】:

以上是关于在 Swift 中从另一个 ViewController 访问变量的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 中从另一个表更新一个表的最佳方法是啥?

如何在 Nuxt 中从另一个访问一个 Vuex 状态?

在SVG中从另一个圆中减去一个圆

如何在颤动中从另一个屏幕进行更改

在java中从另一个调用一个构造函数[重复]

在php中从另一个数组创建一个数组[关闭]