Swift 4.2中的货币转换器

如何转换UITextField输入以显示货币,以及如何转换回双精度格式以进行计算。

您要在使用货币时以正确的方式显示数据来使您的应用程序更上一层楼吗? 这篇文章解释了如何将用户输入以及计算结果从字符串转换为货币输出。

让我们开始吧!

首先,您将需要两个帮助函数:一个用于将String转换为Currency,另一个用于将Currency转换为Double,因此您可以使用数据进行计算!

  func convertDoubleToCurrency(amount:Double)-> String { 
让numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .currency
numberFormatter.locale = Locale.current
返回numberFormatter.string(来自:NSNumber(值:数量))!
} func convertCurrencyToDouble(input:String)-> Double? {
让numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .currency
numberFormatter.locale = Locale.current
返回numberFormatter.number(from:input)?. doubleValue
}

NumberFormatter类很方便,并且可以使用numberStyle实例属性将类型设置为currency! 使用locale实例属性,可以声明货币类型。 如果您使用Locale.current,则您的应用将根据您当前的位置显示货币。 但是,无论您身在何处,如果想要特定的货币怎么办? 这是固定货币的公式:

  let usLocale = Locale(identifier:“ en_US”) 
let frenchLocale =语言环境(标识符:“ fr_FR”)
let germanLocale =语言环境(标识符:“ de_DE”)
let hungarianLocale =语言环境(标识符:“ hu_HU”)
let hungarianLocale =语言环境(标识符:“ it_IT”)

convertDoubleToCurrency函数足以在例如UILabel控件中显示计算的数据:

  createdLabel.text = convertDoubleToCurrency(amount:计算数量) 

现在学习如何以货币显示用户输入:

  var typedValue:Int = 0 
func typedValueToCurrency()->字符串? {
让numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .currency
numberFormatter.locale = Locale.current
让量= Double(typedValue / 100)+
Double(typedValue%100)/ 100
返回numberFormatter.string(来自:NSNumber(值:数量))!
} func textField(_ textFieldToChange:UITextField,shouldChangeCharacters范围:NSRange,replaceString字符串:String)-> Bool {
如果textFieldToChange == typedValueTextField {
如果让digit = Int(string){
typedValue = typedValue * 10 +数字
totalAmount.text = typedValueToCurrency()
}
如果字符串==“” {
typedValue = typedValue / 10
totalAmount.text = typedValueToCurrency()
}
}否则,如果textFieldToChange == textFieldnotInCurrency {
返回真
}
返回假
}

那么函数内部发生了什么? 还是应该从哪里开始? 首先在ViewController中声明一个变量,在这种情况下,它是typedValue整数并分配为0。不要忘记为您的textField分配一个委托,以便进行更改!

接下来讨论typedValueToCurrency函数,该函数是用于格式化货币和将如何显示值的辅助函数:$ 0.00

textField函数实际上是一个内置的实例方法,该方法询问委托是否应更改指定的文本。 这就是为什么如上所述将委托分配给textField的原因。 此方法返回一个布尔值:如果应替换指定的文本范围,则为true;否则为false。 否则,为false保留旧文本。

在此示例中,还考虑了其​​他非货币textField。 如果您不想在给定的textField中进行更改,只需返回true:

 否则,如果textFieldToChange == textFieldnotInCurrency {返回true} 

返回要修改的textField,以货币显示输入:

如果字符串==“”

如果您按退格键,将适用该条件,否则

如果让数字= Int(字符串)

条件确定所键入字符的格式。

你们都准备好了! 继续尝试!