我坚持一个简单的概念(我想),基本上我在Storyboard上有两个ViewController,也有两个类,ViewController和ViewController2:

我有一个默认值(0)的标签,当我单击按钮时,我想将此变量的值更改为10,然后单击按钮“显示”,然后打印此变量,我就成功了更改标签并打印新值。

真正的问题是,当我想从另一个视图获取新的变量值时,即使我尝试在第二个视图上打印变量时也更改了值,该变量总是返回默认值(0)

ios - 在不同类中更改值之前和之后访问相同的变量-Swift-LMLPHP

ViewController

import UIKit

class ViewController: UIViewController {

var variable = "0"
@IBOutlet var defaultLabel: UILabel!
@IBOutlet var label1Label: UILabel!

@IBAction func setValue(sender: AnyObject) {
    setValue()
}


@IBAction func getValue(sender: AnyObject) {
    getValue()
}
override func viewDidLoad() {
    super.viewDidLoad()
}

func setValue(){
    variable = "10"
    defaultLabel.text = variable
}

func getValue(){
    print(variable)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}


}


ViewController2

import UIKit

class ViewController2: UIViewController {

@IBOutlet var label2Label: UILabel!
override func viewDidLoad() {
    super.viewDidLoad()

}

@IBAction func show(sender: AnyObject) {
 print(ViewController().getValue())

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

}
}


我发现了这篇文章:

Access variable in different class - Swift

我确实认为这是找到解决方案的方式,但我真的不明白如何在ViewController2上调用变量。

谢谢。

最佳答案

使用代表!

这是一个示例,其中ViewController1ViewController2的委托:


定义协议:

protocol VariableManager {
  func getValue() -> Int
}

然后,在ViewController1中,修改getValue方法,以使ViewController1符合协议:

class ViewController1: VariableManager {

  func getValue() -> String {
   return variable
  }

}

现在在ViewController2中定义一个名为delegate的变量:

class ViewController2 {
  var delegate: VariableManager?
}

prepareForSegue中的ViewController1方法中:

override func prepareForSegue(segue: UIStoryboardSegue) {

  if let identifier  = segue.identifier {

    switch identifier {
      case "MySegueIdentifier":
        let destination = segue.destinationViewController as! 'ViewController2'
        destination.delegate = self

    default:
      break
    }

  }

}

现在在ViewController2中,更改show方法:

@IBAction func show(sender: AnyObject) {
  if let delegate = delegate {
    let variable = delegate.getValue()
    print(variable)
}



委托是一种非常常见且非常重要的模式。我建议您阅读以下内容:https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/Delegation.html

尝试实例化ViewController1ViewController2的另一个实例不是一个好习惯。

关于ios - 在不同类中更改值之前和之后访问相同的变量-Swift,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32854307/

10-11 22:05
查看更多