如何将委托传递的数据转换为不同的值?

How to convert data passed by delegate to different values?

我想做的是将委托传递的数据相乘并相加,以获得 AdditionalCostsController 的标签 salesTaxLbltotalLbl 中的销售税和总额

AdditionalCostsDelegate 中将数据从 cartTotalLbl(TotalFooter) 传递到 subtotalLbl(AdditionalCostsController) 的函数在将数据传递到标签时没有问题

当我尝试在值 taxes 内乘法以及在值 总计

只要我按下 feesBtn(additionalFeesOnClicked),我就会在 AdditionalCostsDelegate 中收到有关税收或总额的错误代码,错误代码为:

线程 1:致命错误:在展开可选值时意外发现 nil

我的代表:

protocol AdditionalCostsDelegate: class {
    func onTouchAdditionalCostsInfo(info: String)
}

代码放置在我的 TotalFooter 单元格中以传递委托

weak var additionalCostsDelegate: AdditionalCostsDelegate? = nil

@IBAction func additionalFeesOnClicked(_ sender: AnyObject) {
    self.additionalCostsDelegate?.onTouchAdditionalCostsInfo(info: cartTotalLbl.text!)
}

放置在CartViewController中的代码来处理委托

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    let totalFooter = tableView.dequeueReusableCell(withIdentifier: "TotalFooter") as! TotalFooter

   //...... ->

   <-  ...... // code used to get overallTotal

    totalFooter.cartTotalLbl.text = String(overallTotal!)
    totalFooter.additionalCostsDelegate = self

    return totalFooter
}

Delegate 用于将数据传递给 AdditionalCostsController

extension CartViewController: AdditionalCostsDelegate {
    func onTouchAdditionalCostsInfo(info: String) {
        let popUp = self.storyboard?.instantiateViewController(withIdentifier: "AdditionalCostsVC") as! AdditionalCostsController

        self.present(popUp, animated: true) {

            let taxes = Float(info)! * Float(0.0825) //where im getting my error ***
            let total = Float(info)! + Float(taxes)  //where im getting my error ***

            // convert to currency
            let numberFormatter = NumberFormatter()
            numberFormatter.numberStyle = .currency

            // currency conversion
            let salesTax = numberFormatter.string(from: NSNumber(value: Float(taxes)))
            let totalFee = numberFormatter.string(from: NSNumber(value: Float(total)))


            // labels
            popUp.subtotalLbl.text = info

            popUp.salesTaxLbl.text = salesTax
            popUp.totalLbl.text = totalFee
        }
    }
}

这不是将 String 类型转换为 Float 的正确方法,您可以创建一个扩展以像这样从字符串中获取浮点值,

extension String {
    var floatValue: Float {
        return (self as NSString).floatValue
    }
}

并像这样使用它:

let infoFloatValue = info.floatValue

let taxes = infoFloatValue * Float(0.0825)
let total = infoFloatValue + Float(taxes)