Я пытаюсь использовать NumberFormatter
с Swift 3 Decimal
, но я смущен тем, как Decimal
действительно реализуется. Проблема, с которой я сталкиваюсь, заключается в том, что Decimal
является структурой, поэтому я должен привязать ее к NSDecimalNumber
каждый раз, когда я хочу использовать форматтер, чего я бы хотел избежать.
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
let decimal = Decimal(integerLiteral: 3)
let string = formatter.string(from: decimal as NSDecimalNumber)
Является ли идеальным обходным путем для реализации моего собственного расширения, которое принимает Decimal
?
extension NumberFormatter {
open func string(from number: Decimal) -> String? {
return string(from: number as NSDecimalNumber)
}
}
В более общем плане, каждый раз, когда мне нужно передать тип объекта, мне потребуется мост Decimal
или написать дополнительные расширения?
ИЗМЕНИТЬ
Наверное, мне больше интересно узнать о NSDecimal
Decimal
и NSDecimalNumber
в Swift 3. Мне совсем не ясно, что здесь происходит. Должен ли я заменить NSDecimalNumber
на Decimal
для Swift 3? Документы пишут:
Наложение Swift в структуру Foundation предоставляет структуру Decimal, которая соединяется с классом NSDecimalNumber. Тип десятичного значения предлагает ту же функциональность, что и ссылочный тип NSDecimalNumber, и эти два могут быть взаимозаменяемы в коде Swift, который взаимодействует с API Objective-C. Это поведение похоже на то, как Swift соединяет стандартные строковые, числовые и типы коллекций с соответствующими классами Foundation.
Вначале я думал, что Decimal
был новым NSDecimalNumber
как Error
- это новый NSError
, но теперь я не уверен. Это также говорит: "Тип десятичного значения предлагает ту же функциональность, что и ссылочный тип NSDecimalNumber` - это действительно так? Похоже, что я не могу получить практически одинаковые функциональные возможности (без предварительного согласования, конечно, это то, что они означают?). Я нашел несколько сообщений и немного информации здесь и там, но ничего такого убедительного. Кто-нибудь знает или понимает?
Мое приложение специально использует NSDecimalNumber
для валюты и форматирования, поэтому округление и форматирование являются высокоприоритетными.