如何在 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() // ۱۲۰۰ تومان
我知道如何使用 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
.
??
) 回退到空字符串 (""
)
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() // ۱۲۰۰ تومان