如何在 swift 3 的数组中使用 NSFormatter 数字作为波斯语或阿拉伯语数字?

How to use NSFormatter number for Persian or Arabic number in array in swift 3?

我知道如何使用 NSFormatter Number 将英文数字转换为 Persian/Arabic 数字,但问题是我有一个数组并想将数组中的所有数字转换为 Persian/Arabic 数字.

我该怎么做? 请帮忙

这是一个号码的代码:

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))!

如你所见,我可以转换一个数字(checkNumber是英文数字,​​persianNumber是Persian/Arabic数字)

我不确定我是否理解你的问题,但我认为一个简单的 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) ?? ""
}

创建 swift 文件并附加此扩展名

extension String {


 func englishToPersian() -> String{
    var sum = ""
    let letters = self.characters.map { String([=10=]) }
    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([=10=]) }
    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() // ۱۲۰۰  تومان