我坚持一个简单的概念(我想),基本上我在Storyboard上有两个ViewController,也有两个类,ViewController和ViewController2:
我有一个默认值(0)的标签,当我单击按钮时,我想将此变量的值更改为10,然后单击按钮“显示”,然后打印此变量,我就成功了更改标签并打印新值。
真正的问题是,当我想从另一个视图获取新的变量值时,即使我尝试在第二个视图上打印变量时也更改了值,该变量总是返回默认值(0)
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上调用变量。
谢谢。
最佳答案
使用代表!
这是一个示例,其中ViewController1
是ViewController2
的委托:
定义协议:
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
尝试实例化
ViewController1
中ViewController2
的另一个实例不是一个好习惯。关于ios - 在不同类中更改值之前和之后访问相同的变量-Swift,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32854307/