如何将委托传递的数据转换为不同的值?
How to convert data passed by delegate to different values?
我想做的是将委托传递的数据相乘并相加,以获得 AdditionalCostsController
的标签 salesTaxLbl
和 totalLbl
中的销售税和总额
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)
我想做的是将委托传递的数据相乘并相加,以获得 AdditionalCostsController
的标签 salesTaxLbl
和 totalLbl
中的销售税和总额
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)