【问题标题】:Swift : Access variable in ViewControllerSwift:ViewController 中的访问变量
【发布时间】:2016-01-29 07:03:07
【问题描述】:

我有一个带有按钮、索引和按下按钮时调用的函数的视图控制器,下面是代码示例:

视图控制器:

func buttonPressed(){

index++

}

然后我有一个类,我想从视图控制器访问和打印索引

类:

print("Index is \(ViewController().index)")

显然这不起作用,有人知道我如何访问它吗?我不能真正实例化它,因为它是一个 ViewController 以及它不会是同一个索引。我认为。

【问题讨论】:

  • 您需要找到更好的方法来实现这一点,而不是在这里发布问题。很明显 ViewController() 将创建 ViewController 类的新实例。
  • 类可能是在这个视图控制器中创建的,需要访问视图控制器的属性index。在这种情况下,使用委托很容易解决这个问题,或者如果index 没有改变,那么只要按下按钮就将它传递给类。 无论哪种方式,给定的示例都不足以让我们有效地帮助您。
  • @LeoDabus 如果你能回答这个问题并告诉我如何请你会很有帮助!
  • @OriginalAlchemist 您需要该属性在启动过程中持续存在还是暂时的?它是您应用中的设置吗?
  • 坚持发布。在视图控制器屏幕上,用户将选择一些按钮,将 1 添加到索引,然后当他们选择完成时,会出现一个继承自 UIView 的类并显示索引的总数。所以要显示它,我需要从类中访问视图控制器中的索引。那有意义吗? @LeoDabus

标签: ios swift indexing uiviewcontroller


【解决方案1】:

您可以将索引保存到 NSUserDefaults 或 plist 文件中。尝试使用 getter 和 setter 使其自动持久化,如下所示:

Xcode 8.3.3 • Swift 3.1.1

extension UserDefaults {
    var indexA: Int {
        get {
            return integer(forKey: "indexA")
        }
        set {
            set(newValue, forKey: "indexA")
        }
    }
}

用法:

加载它

let indexA = UserDefaults.standard.indexA

设置/更改它

UserDefaults.standard.indexA = 10

【讨论】:

  • 好的,完美!我认为我们正在做某事。但是,我如何在视图控制器中设置它,然后在类中获取它。本质上,语法是什么
  • 在您的项目中创建一个新的 swift 文件并将其命名为 Extensions NSUserDefaults。把这个扩展放在那里。之后,您可以更改它或从代码中的任何位置加载它
  • 嘿 Leo,所以我遇到了一个问题,即 NSUserDefault().indexA = 2 做得不好,但效果很好,但是当我重新运行应用程序时,它会保留该值。无论如何要在应用启动时重置它?
  • 我正在更新它需要在 viewWillAppear dropbox.com/s/rbifquvg54fh3qc/indexSave.zip?dl=1987654321@中加载的项目
  • 非常感谢您通过这种方式帮助我,我真的很感激。但是在你发给我的项目中,如果你将值增加到2,然后重新运行应用程序,它仍然是2。你知道如何重置它吗?
【解决方案2】:

你应该:

  1. index 添加 set public 或 internal 修饰符以便在类外使用它

  2. 创建ViewController的实例

  3. 从实例中检索index

    let vc = ViewController()
    print("index: \(vc.index)")
    

【讨论】:

  • 我这样做了,但它崩溃了。它也是一个非常奇怪的崩溃。这就是我来stackoverflow的原因
  • @original 请提供 ViewController 的完整崩溃示例。我不确定您所说的 index 是什么意思。
【解决方案3】:
let vc = ViewController()  
print("index: \(vc.index)")

不正确,因为 vc 中没有包含您单击的按钮的 viewController。必须再次声明

以防万一,您应该有一个单例 ViewController(例如:viewcontrollerInstall)并放在任何地方以便您可以访问 在 ViewControllerViewDidLoad 中,您设置了 viewcontrollerInstall = self

在你的新课程中:

print("Index is \(viewcontrollerInstall.index)")

【讨论】:

    【解决方案4】:

    尝试将具有索引和按钮的视图控制器的引用传递给您要访问它的类。

    从那里您可以访问该类中该视图控制器的相同索引值和其他属性。

    【讨论】:

    • 是否有任何东西(类、结构...等)我可以在其中创建变量(Int)并在其中填充数据并从项目中的任何位置访问该数据?
    猜你喜欢
    • 2015-10-18
    • 2020-04-15
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2018-06-26
    相关资源
    最近更新 更多