我认为这是一个简单的问题,所以你可能会直接回答这个问题。
我有一个全局变量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不会更新 问题:如何强制全局变量“更新”?
答案 0 :(得分:0)
您可以通过多种方式执行此操作。您可以通过放入Appdelegate将switchStatusArray作为全局,或者您可以使用nsnotifiation或者您可以进行委托。
如果使用通知,则首先使方法初始化该数组并在通知方法中用作选择器。
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()。
答案 1 :(得分:0)
如果我正确理解了您的代码,那么每次从switchStatusIndex
方法中访问该数组时,您都希望更新viewWillAppear
数组的内容。但这不会发生,因为switchStatusIndex
只设置了一次而且再也没有改变过。也许您打算将switchStatusIndex
定义为计算属性或由闭包初始化的属性,以便每次访问它时都会发生一些事情(使用{{1}中的值更新数组内容})。