如何在 swift 3 中将波斯语或阿拉伯语数字用于数组中的 NSFormatter 数字



我知道如何使用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) ?? ""
}

最新更新