Как использовать NumberFormatter в SwiftUI?

Я пытаюсь использовать ниже NumberFormatter но не могу понять, как использовать его в TextПосмотреть? Все в сети связано с TextView.

       static let numberFormat: NumberFormatter =  {
        let numberFormatter = NumberFormatter()
        numberFormatter.numberStyle = .none
        numberFormatter.positivePrefix = "+"
        numberFormatter.negativePrefix = "-"
        return numberFormatter
    }()

Моя попытка использования: но я получаю сообщение об ошибке Instance method 'appendInterpolation(_:formatter:)' requires that 'Int' inherit from 'NSObject'

      Text("\(450, formatter: Self.numberFormat)")

2 ответа

Решение

Вот простой способ:

Таким образом, вы сохраните свой @Stateкак можно более чистый. Так же formatterFunction(number: Int) теперь можно использовать повторно и получить доступ отовсюду по сравнению с вашим способом, который нельзя было бы использовать повторно или получить доступ.


      extension Formatter {
    static let number: NumberFormatter = {
        let formatter = NumberFormatter()
        formatter.numberStyle = .none
        formatter.positivePrefix = "+"
        formatter.negativePrefix = "-"
        return formatter
    }()
}

      func formatterFunction(number: Int) -> String {
    Formatter.number.string(for: number) ?? ""
}

      struct ContentView: View {
    @State var number: Int = 450
    var body: some View { 
        Text(formatterFunction(number: number))
    }
}

Если вы просто хотите добавить + и - к вашему тексту, просто используйте эту функцию ниже:

      func formatterFunction(number: Int) -> String {
    if number > 0 {
        return "+" + String(number)
    }
    else if number < 0 {
        return "-" + String(abs(number))
    }
    else {
        return String(number)
    }
}

Swift нужно указать, чтобы преобразовать Int в NSNumber для средства форматирования.

Text("\(450 как NSNumber, средство форматирования: Self.numberFormat)")

Никаких других изменений в вашем коде не требуется.

Другие вопросы по тегам