2017-01-16 13 views
2

В моем приложении у меня есть 5 uitextfields. Мои предназначенные пользователи - арабские, поэтому, когда они используют мое приложение, они либо вставляют номер на английском, либо на арабском языке.Как преобразовать арабские цифры в английские номера в swift?

Приложение прекрасно работает с английскими номерами. Однако, когда я запускаю его и вставляю числа на арабском языке, приложение имеет дело с текстовыми полями, как будто все они пусты, и дает ответ как 0

Как я могу убедиться, что текстовые поля не являются нил И двойной, без игнорируя арабские цифры?

Это код внутри функции «calButton»:

 /*let value1 = Double(income.text ?? "") ?? 0 
    let value2 = Double(salaries.text ?? "") ?? 0 
    let value3 = Double(tools.text ?? "") ?? 0 
    let value4 = Double(maintinance.text ?? "") ?? 0 
    let value5 = Double(otherExpenses.text ?? "") ?? 0 
    let sum = value1 - (value2 + value3 + value4 + value5) 

    print("result is: \(sum)")*/ 



    let textFields = [income, salaries, tools, maintinance, otherExpenses] 
    var sum = 0.0 
    for textField in textFields { 
     if let number = Double((textField?.text!)!) { //checks that it is not nil AND a Double 
      sum += number 
     } 
    } 

    expensesTotal.text = String(sum) 
    // print("result is: \(sum)") 
+0

Используйте словарь, в котором он находится, являются арабскими цифрами, а значения - английскими. – Dasem

+1

Инициализатор 'Double' очень упрощен. Для такого рода сложного поведения вы захотите использовать «NumberFormatter» https://developer.apple.com/reference/foundation/numberformatter – Alexander

+0

«Арабские цифры» - это десятичная система, которую мы используем каждый день. Возможно, вы имели в виду «преобразование арабских строк в десятичные числа»? И можете ли вы предоставить пример ввода и вывода? –

ответ

6

Вам нужно преобразовать строку арабскими цифрами на английский первый, а затем сделать расчет части.

let numberStr: String = "٨٦٩١٢٨٨١" 
    let formatter: NumberFormatter = NumberFormatter() 
    formatter.locale = NSLocale(localeIdentifier: "EN") as Locale! 
    let final = formatter.number(from: numberStr) 
    let doubleNumber = Double(final!) 
    print("\(doubleNumber)")