Как создать интервал между цифрами в строке(формат: «%.f»), как в приложении калькулятора в пользовательском интерфейсе swift

#swift #user-interface #calculator #spacing

Вопрос:

Как я могу организовать свою строку так, чтобы она выглядела почти как оригинальный калькулятор. В принципе, я использую строку в следующем формате (String(format: "%.f")

Мой код Ниже

  mutating func appendNumber(_ number: Double) {
        if number.truncatingRemainder(dividingBy: 1) == 0 amp;amp; currentNumber.truncatingRemainder(dividingBy: 1) == 0 {
            currentNumber = 10 * currentNumber   number
        } else {
            currentNumber = number
        }
    
    }
}

struct Home: View {
    let characterLimit = 9
    
    //MARK: - Computed propety
    var displayedString: String {
        return String(String(format: "%.01f",
                             arguments: [state.currentNumber]).prefix(characterLimit))
    }
    
 

Я хочу, чтобы в нем был интервал каждые 3 символа, такой же, как в родном приложении калькулятора для IOS.
введите описание изображения здесь

Ответ №1:

Вы должны использовать NumberFormatter . Пример:

 var displayedString: String {
    let formatter = NumberFormatter()
    formatter.numberStyle = .decimal
    return String((formatter.string(for: state.currentNumber) ?? "").prefix(characterLimit))
}

 

Обратите внимание, что вывод зависит от локали. В одной локали он может выводиться 123,456,789 . В другом месте это могло бы быть 123 456 789 , и в третьем это могло бы быть 123.456.789 . Я почти уверен, что существуют локали, в которых используются разные размеры групп. Приложение «Калькулятор» тоже ведет себя так же. Например, в приложении «Калькулятор» на моем телефоне в качестве разделителя используются запятые, а не пробелы.

Если вы хотите использовать пробелы через каждые 3 цифры для группировки независимо от того, где установлен языковой стандарт телефона, вы можете установить его вручную:

  formatter.groupingSeparator = " "
 formatter.groupingSize = 3