连续检查并刷新userdefault整数

时间:2016-12-28 04:58:53

标签: ios swift3

我正在尝试让我的应用程序彻底检查UserDefault以查看它是否发生了变化。如果默认值为viewDidLoad,则为20,之后的时间减少为15,我希望ViewController刷新并显示正确的数字。这是我读取默认值的代码。

import UIKit

let Ironcnt = UserDefaults.standard
let Goldcnt = UserDefaults.standard
let Fiveth = UserDefaults.standard

let shipcnt = UserDefaults.standard
let empirecnt = UserDefaults.standard

var fiveth = Int()
var iron = Int()
var gold = Int()
var ships = Int()
var empires = Int()

class twenty: UIViewController {
    @IBOutlet weak var fiveth1: UILabel!
    @IBOutlet weak var iron1: UILabel!
    @IBOutlet weak var gold1: UILabel!
    @IBOutlet weak var ships1: UILabel!
    @IBOutlet weak var empire1: UILabel!

@IBOutlet weak var webViewBG: UIWebView!

override func viewDidLoad() {
    super.viewDidLoad()

    let htmlPath = Bundle.main.path(forResource: "WebViewContent", ofType: "html")
    let htmlURL = URL(fileURLWithPath: htmlPath!)
    let html = try? Data(contentsOf: htmlURL)

    self.webViewBG.load(html!, mimeType: "text/html", textEncodingName: "UTF-8", baseURL: htmlURL.deletingLastPathComponent())

    if (Fiveth.value(forKey: "Fiveth") != nil){
        fiveth = Fiveth.value(forKey: "Fiveth") as! NSInteger!
        fiveth1.text = NSString(format: "Fiveth: %i", fiveth) as String
    }
    if (Ironcnt.value(forKey: "Ironcnt") != nil){
        iron = Ironcnt.value(forKey: "Ironcnt") as! NSInteger!
        iron1.text = NSString(format: "Iron: %i", iron) as String
    }
    if (Goldcnt.value(forKey: "Goldcnt") != nil){
        gold = Goldcnt.value(forKey: "Goldcnt") as! NSInteger!
        gold1.text = NSString(format: "Gold: %i", gold) as String
    }
}

1 个答案:

答案 0 :(得分:1)

重构所有这些,你不需要创建这么多的引用:

let Ironcnt = UserDefaults.standard
let Goldcnt = UserDefaults.standard
let Fiveth = UserDefaults.standard

let shipcnt = UserDefaults.standard
let empirecnt = UserDefaults.standard

var fiveth = Int()
var iron = Int()
var gold = Int()
var ships = Int()
var empires = Int()
像这样:

var fiveth: Int {
    set {
        fiveth1.text = newValue
        UserDefaults.standard.set(newValue, forKey: "fiveth")
    }

    get {
        return UserDefaults.standard.integer(forKey: "fiveth")
    }
}

然后在更改int

时会更新userdefault和label