繁体   English   中英

如何强制全局变量“更新”?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM