Swift 更改 ViewDidLoad 中的方法
Swift change method in ViewDidLoad
我正在尝试使用以下代码更改 ViewDidLoad 中的方法:
在 class 声明中:
var nextValue: Int!
并且在 ViewDidLoad 中:
if nextValue == nil {
print("Hi")
} else if nextValue == 2 {
print("Hello")
}
最后是更改 nextValue 值的函数:
func buttonAction(sender: AnyObject) {
self.performSegueWithIdentifier("nextView", sender: self)
nextValue = 2
}
当我从 "nextView" 返回到第一个视图时,nextValue 应该是 2 但它是零。我做错了什么?
你对视图生命周期的理解是错误的。
首先,您在 class 声明中用 nil 值声明变量。
然后,在 viewDidLoad 方法期间检查它的值,最后通过一些按钮操作更改它的值。
但是,当您通过 segue 离开视图控制器屏幕到 nextView 时,您的 firstView 将被释放,当您再次表示它时,循环将返回到声明级别。由于您将变量值声明为 nil,因此它将始终显示 nil 值。
如果你想保留它的值,你需要将它保存在其他地方,NSUserDefault 似乎是一个很好的选择来存储它的值。
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
nextValue = NSUserDefaults.standardUserDefaults().valueForKey("nextValue") as? Int
if nextValue == nil {
print("Hi")
} else if nextValue == 2 {
print("Hello")
}
}
func buttonAction(sender: AnyObject) {
self.performSegueWithIdentifier("nextView", sender: self)
nextValue = 2
NSUserDefaults.standardUserDefaults().setInteger(2, forKey: "nextValue")
}
我正在尝试使用以下代码更改 ViewDidLoad 中的方法:
在 class 声明中:
var nextValue: Int!
并且在 ViewDidLoad 中:
if nextValue == nil {
print("Hi")
} else if nextValue == 2 {
print("Hello")
}
最后是更改 nextValue 值的函数:
func buttonAction(sender: AnyObject) {
self.performSegueWithIdentifier("nextView", sender: self)
nextValue = 2
}
当我从 "nextView" 返回到第一个视图时,nextValue 应该是 2 但它是零。我做错了什么?
你对视图生命周期的理解是错误的。
首先,您在 class 声明中用 nil 值声明变量。 然后,在 viewDidLoad 方法期间检查它的值,最后通过一些按钮操作更改它的值。
但是,当您通过 segue 离开视图控制器屏幕到 nextView 时,您的 firstView 将被释放,当您再次表示它时,循环将返回到声明级别。由于您将变量值声明为 nil,因此它将始终显示 nil 值。
如果你想保留它的值,你需要将它保存在其他地方,NSUserDefault 似乎是一个很好的选择来存储它的值。
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
nextValue = NSUserDefaults.standardUserDefaults().valueForKey("nextValue") as? Int
if nextValue == nil {
print("Hi")
} else if nextValue == 2 {
print("Hello")
}
}
func buttonAction(sender: AnyObject) {
self.performSegueWithIdentifier("nextView", sender: self)
nextValue = 2
NSUserDefaults.standardUserDefaults().setInteger(2, forKey: "nextValue")
}