在 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 访问变量的主要内容,如果未能解决你的问题,请参考以下文章