[英]How can i update a locally updated value inside a function and set the answer to a global variable outside the function?
[英]How can I force a global variable to “update”?
我认为这是一个简单的问题,因此您可以直接解决这个问题。
我有一个全局变量switchStatusIndex(不属于任何类。):
import Foundation
//Default
var userIndex:[Int] = [0,1,2]
var userIndexForItem:[Int] = [Int]()
//Index to hold the switch status for all datatypes
var switchStatusIndex:[String] = [
NSUserDefaults.standardUserDefaults().boolForKey("switchA").description,
NSUserDefaults.standardUserDefaults().boolForKey("switchB").description,
NSUserDefaults.standardUserDefaults().boolForKey("switchC").description]
在ViewControllerOne中,我有一个函数:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
setupUserIndexForItem ()
}
func setupUserIndexForItem () {
userIndexForItem = [Int]() //clears userIndexForItem
for i in 0...userIndex.count-1{
if switchStatusIndex[i] == "true"{
userIndexForItem.append(userIndex[i])
}
}
}
最后我有一个带有UISwitches ex的ViewControllerTwo
@IBOutlet var switchA: UISwitch!
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
override func layoutSubviews() {
restoreSwitchesStates()
}
@IBAction func setStateSwitchA(sender: UISwitch) {
var userdefault: NSUserDefaults = NSUserDefaults.standardUserDefaults()
if switchA.on == true {
userdefault.setBool(switchA!.on, forKey: "switchA")
}else if switchA.on == false {
userdefault.setBool(switchA!.on, forKey: "switchA")
}
userdefault.synchronize()
}
func restoreSwitchesStates() {
switchA!.on = NSUserDefaults.standardUserDefaults().boolForKey("switchA")
}
当我将开关拨到.on时,它将NSUserdefault更新为“ true”。 但是,当我回到ViewControllerOne时,setupUserIndexForItem不会反映此更改。 因为switchStatusIndex不更新。
问题 :如何强制全局变量“更新”?
您可以通过多种方式执行此操作。您可以通过放入Appdelegate将switchStatusArray设置为全局对象,或者可以使用nsnotifiation或进行委托。
如果使用通知,则首先使用make方法初始化该数组,并在通知方法中用作选择器。
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: "intializeSwitcharrayMethod:",
name:"intializeSwitcharray" object: nil)
@objc func intializeSwitcharrayMethod(notification: NSNotification){
//do stuff
Self.intializeSwitcharraywithUserdefaults()
}
func intializeSwitcharraywithUserdefaults()
{
// your code of array intialization
}
您也可以从viewdidload调用intializeSwitcharraywithUserdefaults()。
如果我正确理解您的代码,则您期望每次您从viewWillAppear
方法中访问该数组时, switchStatusIndex
数组的内容都会更新。 但这不会发生,因为switchStatusIndex
仅设置一次,以后再也不会更改。 也许您打算将switchStatusIndex
定义为计算属性或由闭包初始化的属性,以便每次访问它时,都会发生某些情况(数组内容将使用NSUserDefaults
的值进行NSUserDefaults
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.