如何将userDefault乘以数字?

时间:2019-12-11 18:02:24

标签: ios swift nsuserdefaults

如何将用户默认值乘以数字

当我尝试将用户默认值乘以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")
    }   
}

2 个答案:

答案 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中的值时,通常用在变量中的自定义getset来包装它们,这样通常会很有帮助,以便您可以像平常一样访问它们变量。

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,如下所示:

enter image description here

但是,如果已经设置了一个值,那么您将在打印出来之前看到它在这里设置5.0的地方。

enter image description here