Swift 检查数字语言是否为英语或阿拉伯语/波斯语

Swift 检查数字语言是否为英语或阿拉伯语/波斯语,swift,unicode,persian,nslocale,farsi,Swift,Unicode,Persian,Nslocale,Farsi,在我的项目中,我计划将任何类型的数字语言更改为波斯语,以下是我所做的: public extension String { func perstianString (string: String)->String { let digitSet = CharacterSet.decimalDigits var finalString = String() for ch in string.unicodeScalars {

在我的项目中,我计划将任何类型的数字语言更改为波斯语,以下是我所做的:

public extension String {
    func perstianString (string: String)->String {
        let digitSet = CharacterSet.decimalDigits
        var finalString = String()
        for ch in string.unicodeScalars {
            if digitSet.contains(ch) {
                let sh = convertoPersianNum(num: "\(ch)")
                finalString += sh
                }
            } else {
                finalString += "\(ch)"
            }
        }
        return finalString
    }

    func convertoPersianNum(num: String)->String{
        var retVlue = String()
        var num1 = num

        let number = NSNumber(value: Int(num1)!)

        let numb = (num as NSString).intValue
        let format = NumberFormatter()
        format.locale = Locale(identifier: "fa_IR")
        let faNumber = format.string(from: number)

        return faNumber!
    }
}
但当源值包含波斯数字时,应用程序崩溃。简单地说,我想检查它是否是波斯数字,不要做任何事情,否则请执行上面的转换:

let string = "ییسس ۱۲۳۴"
对于此类型,请不要执行任何其他操作。

公共扩展字符串{
public extension String {

    private var isPersian: Bool {

        let predicate = NSPredicate(format: "SELF MATCHES %@", "(?s).*\\p{Arabic}.*")
        return predicate.evaluate(with: self)
    }

    private var toPersianNum: String {

        let number = NSDecimalNumber(string: self)
        let formatter = NumberFormatter()
        formatter.locale = Locale(identifier: "fa_IR")
        return formatter.string(from: number) ?? ""
    }

    var persian:String {

        var retVal = String()

        self.enumerateSubstrings(in: startIndex..<endIndex, options: .byComposedCharacterSequences) { (string, _, _, _) in
            guard let string = string else {return}

            if string.isPersian {
                retVal += string
            }else {
                retVal += string.toPersianNum
            }
        }
        return retVal
    }
}


let string = "9001ییسس2345777 ۱۲۳۴2345"

string.persian // "۹۰۰۱ییسس۲۳۴۵۷۷۷ناعدد۱۲۳۴۲۳۴۵" (result)
私有变量isPersian:Bool{ let predicate=NSPredicate(格式:“SELF MATCHES%@”,“s.*\\p{Arabic}.*”) 返回谓词.evaluate(使用:self) } 私有变量:字符串{ let number=NSDecimalNumber(字符串:self) let formatter=NumberFormatter() formatter.locale=locale(标识符:“fa_IR”) 返回格式化程序.字符串(从:编号)?“” } 波斯语:字符串{ var retVal=String() self.EnumerateSubstring(在:startIndex..
公共扩展字符串中){
私有变量isPersian:Bool{
let predicate=NSPredicate(格式:“SELF MATCHES%@”,“s.*\\p{Arabic}.*”)
返回谓词.evaluate(使用:self)
}
私有变量:字符串{
let number=NSDecimalNumber(字符串:self)
let formatter=NumberFormatter()
formatter.locale=locale(标识符:“fa_IR”)
返回格式化程序.字符串(从:编号)?“”
}
波斯语:字符串{
var retVal=String()
self.enumeratesubstring(in:startIndex。。