跨.swift文件传输用户默认值

跨.swift文件传输用户默认值,swift,nsuserdefaults,Swift,Nsuserdefaults,我想在应用程序实用程序文件中设置用户默认值,并在我想要的任何视图控制器中调用它们。以下是今日小部件: import UIKit import NotificationCenter class TodayViewController: UIViewController, NCWidgetProviding { @IBOutlet weak var BitCount: UILabel! @IBOutlet weak var upCost: UILabel! var Bits:Double =

我想在应用程序实用程序文件中设置用户默认值,并在我想要的任何视图控制器中调用它们。以下是今日小部件:

import UIKit
import NotificationCenter

class TodayViewController: UIViewController, NCWidgetProviding {

@IBOutlet weak var BitCount: UILabel!
@IBOutlet weak var upCost: UILabel!

var Bits:Double = defualts.double(forKey: "bits")
var bitsPerClick:Double = defualts.double(forKey: "bitsPerClick")
var upgradePrice:Double =  defualts.double(forKey: "upgradeCost")

//Click bit
@IBAction func Click(_ sender: Any) {
    AppUtility().bitClick()
    BitCount.text = "\(Bits)"
}

//Click Upgrade
@IBAction func Upgrade(_ sender: Any) {
    AppUtility().upgradeClick()
        upCost.text = "Cost \(upgradePrice)"
        BitCount.text = "\(Bits)"
}
以下是应用程序实用程序:

import Foundation
import UIKit

let defualts = UserDefaults.standard

var Bits:Double = defualts.double(forKey: "bits")
var bitsPerClick:Double = defualts.double(forKey: "bitsPerClick")
var upgradePrice:Double =  defualts.double(forKey: "upgradeCost")

class AppUtility: UIViewController {

public func setDefualts() {
defualts.set(0, forKey: "bits")

defualts.set(1, forKey: "bitsPerClick")

defualts.set(10, forKey: "upgradeCost")
}

public func upgradeClick() {

    if Bits >= upgradePrice {
        Bits = Bits - upgradePrice
        bitsPerClick = bitsPerClick + 1
        upgradePrice = upgradePrice * 1.5
    }
}
public func bitClick() {
    Bits = Bits + bitsPerClick
}
}
当我运行代码时,所有标签都显示为空,因此我假设用户默认值未设置或调用不正确

/// Global Struct
struct globalValues {
    static var firstValue : String?
    static var secondValue : String?
}

/// Set Value
globalValues.firstValue = "1"
globalValues.secondValue = "2"

/// Get Values
print(globalValues.firstValue ?? "")
print(globalValues.secondValue ?? "")

/// When App is closed Struct will be cleared
/// Save Data for reference in UserDefaults
/// Now in App Delegate which is called for
/// first time Just Assign
/// Userdefaults values to Struct
/// So you can use it -- like
globalValues.firstValue = UserDefaults.standard.value(forKey: "firstValue") as? String
globalValues.secondValue = UserDefaults.standard.value(forKey: "secondValue") as? String

因此,不需要将任何内容从一个类传递到另一个类,这将节省您的时间和一些代码(编译时间)

您将值存储为整数,但将其读取为双精度

改变

 defualts.set(1, forKey: "bitsPerClick")

或者把它们读作整数

var bitsPerClick:Int = defualts.integer(forKey: "bitsPerClick")
var bitsPerClick:Int = defualts.integer(forKey: "bitsPerClick")