如何将 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 中的值时,将它们用自定义的 getset 包装在一个变量中通常会很有帮助,这样您就可以访问它们像普通变量一样。

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 的位置。