仅求和String-Swift中的数字



我有一个标签,它有数字、美元符号,还有一个增加和减少数字的UIStepper。我面临的问题是,它不能将数字与美元符号求和,而我想要的是将数字与金钱符号求和。

import UIKit
import GMStepper
class ViewController: UIViewController {

@IBOutlet var stepper: GMStepper!
@IBOutlet var priceLabel: UILabel!
var price: Double = 5.500

override func viewDidLoad() {

super.viewDidLoad()

priceLabel.text = "5.5 $"

}

@IBAction func stepper(_ sender: Any) {

let newValue =  price * stepper.value
let priceS = String(format: "%.3f", newValue)
priceLabel.text = "(priceS) $"
}
}

不确定您想要实现什么,只提取值或将字符串中的各个数字相加。因此,要提取数字(使用text作为要解析的字符串(:

let value = Double(text.filter{"0123456789.".contains($0)})

选择Double会提供一个可选选项,所以你需要根据自己的情况适当处理。如果它来自步进器,您可能能够安全地强制打开包装。

如果你想总结数字,你可以使用类似的方法:

let sum = text.filter{"0123456789".contains($0)}.reduce(0){$0 + Int(String($1))!}```

首先,让我们正确地将货币值转换为String

第二件事是忘记尝试将String用于任何事情。请考虑仅显示格式化字符串。不要试图把它们转换成数字。相反,将必要的值保留为数字。

class ViewController: UIViewController {
private lazy var formatter: NumberFormatter = {
let numberFormatter = NumberFormatter()
numberFormatter.locale = Locale(identifier: "en_US")
numberFormatter.numberStyle = .currency
numberFormatter.currencyCode = "USD"
numberFormatter.minimumFractionDigits = 3
numberFormatter.maximumFractionDigits = 3
return numberFormatter
}()
var originalPrice: Double = 5.5
private var price = originalPrice
private func updateText() {
priceLabel.text = formatter.string(for: price)
}
override func viewDidLoad() {
super.viewDidLoad();
updateText()
}
@IBAction func stepper(_ sender: Any) { 
// do any calculation here using price and stepper.value
price = originalPrice * stepper.value
updateText()
}
}

最新更新