我知道如何使用NSFormatter Number将英语数字转换为波斯/阿拉伯语数字,但问题是我有一个数组,并希望将数组中的所有数字转换为波斯/阿拉伯数字。
我该怎么做?请帮忙。
这是一个数字的代码:
let numberFormatter = NumberFormatter()
numberFormatter.locale = Locale(identifier: "fa")
numberFormatter.numberStyle = NumberFormatter.Style.decimal
numberFormatter.string(from: NSNumber(value: checkNumber))
let persianNumber = numberFormatter.string(from: NSNumber(value: checkNumber))!
如您所见,我可以转换一个数字(校验号是英文数字,波斯数字是波斯/阿拉伯数字(
创建 swift 文件并附加此扩展名
extension String {
func englishToPersian() -> String{
var sum = ""
let letters = self.characters.map { String($0) }
for letter in letters {
if (Int(letter) != nil) {
let persianNumber = ["۰","۱","۲","۳","۴","۵","۶","۷","۸","۹"]
sum = sum+persianNumber[Int("(letter)")!]
} else {
sum = sum+letter
}
}
return sum
}
func persianToEnglish() -> String{
var sum = ""
let letters = self.characters.map { String($0) }
let persianNumber = ["۰","۱","۲","۳","۴","۵","۶","۷","۸","۹"]
for letter in letters {
for (index, element) in persianNumber.enumerated() {
if letter == element {
sum = sum + "(index)"
}
}
}
return sum
}
}
使用这个 😊
let strEnglish1 = "1234567890"
strEnglish1.englishToPersian() // ۱۲۳۴۵۶۷۸۹۰
let strEnglish2 = "1200 toman"
strEnglish2.englishToPersian() // ۱۲۰۰ toman
let strPersian1 = "۱۲۳۴۵۶۷۸۹۰"
strPersian1.persianToEnglish() // 1234567890
let strPersian2 = "۱۲۰۰ تومان"
strPersian1.persianToEnglish() // ۱۲۰۰ تومان
我不确定我是否理解你的问题,但我认为一个简单的 for 循环可以做你想要的。
重要的是摆脱从数字格式化程序获得的可选String
,因为您无法将可选字符串(String?
(附加到字符串数组([String]
(。当数字格式化程序的结果nil
时,可以使用 nil 合并运算符 (??
( 回退到空字符串 (""
(。
let numberFormatter = NumberFormatter()
numberFormatter.locale = Locale(identifier: "fa")
numberFormatter.numberStyle = .decimal
let arrayOfNumbers = [1, 2, 3]
var arrayOfStrings = [String]()
for number in arrayOfNumbers {
let string = numberFormatter.string(from: number as NSNumber) ?? ""
arrayOfStrings.append(string)
}
更好的是,您可以使用 map
函数而不是 for 循环。
let arrayOfStrings = arrayOfNumbers.map { (number) in
return numberFormatter.string(from: number as NSNumber) ?? ""
}