跨.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")