如何将 userDefault 乘以一个数字?
How to multiply a userDefault by a number?
我怎样才能将用户默认值乘以一个数字
当我尝试将我的用户默认值乘以 FeesVC
中的一个数字时,我的应用程序崩溃了
将小计传递给 subtotalLbl(单独使用时)效果非常好,但如果我在尝试计算 salesTaxLbl 和 overallTotalLbl[= 时尝试乘以 UserDefault
的任何数字,应用程序就会崩溃14=]
class FooterCell: UITableViewCell {
@IBOutlet weak var cartTotal: UILabel!
@IBOutlet weak var totalInfoBtn: UIButton!
@IBAction func additionalFeesOnClicked(_ sender: Any) {
UserDefaults.standard.set(cartTotal.text, forKey: "PASS_DATA")
}
}
class FeesViewController: UIViewController {
@IBOutlet weak var subtotalLbl: UILabel!
@IBOutlet weak var salesTaxLbl: UILabel!
@IBOutlet weak var overallTotalLbl: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// passes data into FeesVC Fine
let subtotal = UserDefaults.standard.object(forKey: "PASS_DATA")
// app crashed when trying to multiply the user default by a number
let tax = Float(subtotal)! * Float(0.0825)
let total = Float(subtotal)! + Float(tax)
subtotalLbl.text = "\(subtotal!)"
salesTaxLbl.text = "\(Tax)"
overallTotalLbl.text = "\(total)"
}
@IBAction func returnButton(_ sender: Any) {
dismiss(animated: true, completion: nil)
print("Close Taxes and Fees")
}
}
您应该将您的值存储和加载为 float/double,例如
@IBAction func additionalFeesOnClicked(_ sender: Any) {
if let value = Float(cartTotal.text) {
UserDefaults.standard.set(value, forKey: "PASS_DATA")
}
//or if you want to store a default value
//UserDefaults.standard.set(Float(cartTotal.text) ?? 0, forKey: "PASS_DATA")
}
和
let subtotal = UserDefaults.standard.float(forKey: "PASS_DATA")
像这样处理 UserDefaults
中的值时,将它们用自定义的 get
和 set
包装在一个变量中通常会很有帮助,这样您就可以访问它们像普通变量一样。
var subTotal: Float {
get {
return UserDefaults.standard.float(forKey: "PASS_DATA")
}
set {
UserDefaults.standard.set(newValue, forKey: "PASS_DATA")
}
}
这将为您提供一个像普通变量一样执行的变量 Float
,因此您可以对其进行操作而不必担心实现细节。
现在,您可以做到这一切 Just Works (tm)。
let tax = subtotal * Float(0.0825)
已更新以显示此操作。
遇到断点时,我在底部控制台的右侧运行 po UserDefaults.standard.float(forKey: "PASS_DATA")
命令。这允许您查询值。
当没有为 PASS_DATA
设置值时,您将获得 0.0
的默认值,如下所示:
但是,如果已经设置了一个值,那么您将在此处看到我在打印之前设置 5.0
的位置。
我怎样才能将用户默认值乘以一个数字
当我尝试将我的用户默认值乘以 FeesVC
将小计传递给 subtotalLbl(单独使用时)效果非常好,但如果我在尝试计算 salesTaxLbl 和 overallTotalLbl[= 时尝试乘以 UserDefault
的任何数字,应用程序就会崩溃14=]
class FooterCell: UITableViewCell {
@IBOutlet weak var cartTotal: UILabel!
@IBOutlet weak var totalInfoBtn: UIButton!
@IBAction func additionalFeesOnClicked(_ sender: Any) {
UserDefaults.standard.set(cartTotal.text, forKey: "PASS_DATA")
}
}
class FeesViewController: UIViewController {
@IBOutlet weak var subtotalLbl: UILabel!
@IBOutlet weak var salesTaxLbl: UILabel!
@IBOutlet weak var overallTotalLbl: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// passes data into FeesVC Fine
let subtotal = UserDefaults.standard.object(forKey: "PASS_DATA")
// app crashed when trying to multiply the user default by a number
let tax = Float(subtotal)! * Float(0.0825)
let total = Float(subtotal)! + Float(tax)
subtotalLbl.text = "\(subtotal!)"
salesTaxLbl.text = "\(Tax)"
overallTotalLbl.text = "\(total)"
}
@IBAction func returnButton(_ sender: Any) {
dismiss(animated: true, completion: nil)
print("Close Taxes and Fees")
}
}
您应该将您的值存储和加载为 float/double,例如
@IBAction func additionalFeesOnClicked(_ sender: Any) {
if let value = Float(cartTotal.text) {
UserDefaults.standard.set(value, forKey: "PASS_DATA")
}
//or if you want to store a default value
//UserDefaults.standard.set(Float(cartTotal.text) ?? 0, forKey: "PASS_DATA")
}
和
let subtotal = UserDefaults.standard.float(forKey: "PASS_DATA")
像这样处理 UserDefaults
中的值时,将它们用自定义的 get
和 set
包装在一个变量中通常会很有帮助,这样您就可以访问它们像普通变量一样。
var subTotal: Float {
get {
return UserDefaults.standard.float(forKey: "PASS_DATA")
}
set {
UserDefaults.standard.set(newValue, forKey: "PASS_DATA")
}
}
这将为您提供一个像普通变量一样执行的变量 Float
,因此您可以对其进行操作而不必担心实现细节。
现在,您可以做到这一切 Just Works (tm)。
let tax = subtotal * Float(0.0825)
已更新以显示此操作。
遇到断点时,我在底部控制台的右侧运行 po UserDefaults.standard.float(forKey: "PASS_DATA")
命令。这允许您查询值。
当没有为 PASS_DATA
设置值时,您将获得 0.0
的默认值,如下所示:
但是,如果已经设置了一个值,那么您将在此处看到我在打印之前设置 5.0
的位置。