如何将用户默认值乘以数字
当我尝试将用户默认值乘以FeesVC
中的数字时,我的应用程序崩溃
将小计传递到subtotalLbl时效果很好(如果单独使用),但是如果在尝试计算salesTaxLbl和totalTotalLbl
时,如果我尝试用UserDefault
乘以任何数字,则会使应用程序崩溃
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")
}
}
答案 0 :(得分:1)
例如,您应该将值存储为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")
答案 1 :(得分:1)
当像这样使用UserDefaults
中的值时,通常用在变量中的自定义get
和set
来包装它们,这样通常会很有帮助,以便您可以像平常一样访问它们变量。
var subTotal: Float {
get {
return UserDefaults.standard.float(forKey: "PASS_DATA")
}
set {
UserDefaults.standard.set(newValue, forKey: "PASS_DATA")
}
}
这将为您提供一个性能与普通Float
相似的变量,因此您可以对其进行操作而不必担心实现细节。
现在,您可以执行此操作,并且一切正常(tm )。
let tax = subtotal * Float(0.0825)
已更新以显示实际效果。
当遇到断点时,我在底部控制台的右侧运行po UserDefaults.standard.float(forKey: "PASS_DATA")
命令。这使您可以查询值。
如果没有为PASS_DATA
设置任何值,则将获得默认值0.0
,如下所示:
但是,如果已经设置了一个值,那么您将在打印出来之前看到它在这里设置5.0
的地方。