@@ -16,9 +16,9 @@ import Foundation
1616/// A `NumberFormatter` provider class for prices.
1717/// This provider caches the formatter to improve the performance.
1818final class PriceFormatterProvider : Sendable {
19-
19+
2020 private let priceFormattingRuleSet : PriceFormattingRuleSet ?
21-
21+
2222 init ( priceFormattingRuleSet: PriceFormattingRuleSet ? = nil ) {
2323 self . priceFormattingRuleSet = priceFormattingRuleSet
2424 }
@@ -49,24 +49,23 @@ final class PriceFormatterProvider: Sendable {
4949 formatter. currencySymbolOverride == priceFormattingRuleSet? . currencySymbolOverride ( currencyCode: formatter. currencyCode) {
5050 return formatter
5151 }
52- }
53- else if let formatter = formatter, formatter. locale == locale {
52+ } else if let formatter = formatter, formatter. locale == locale {
5453 return formatter
5554 }
56-
55+
5756 var newFormatter = makePriceFormatterForSK1 (
5857 with: locale,
5958 currencySymbolOverride: nil
6059 )
61-
60+
6261 // If there is a currency symbol override for the currencyCode of the new formatter, use that
6362 if let currencySymbolOverride = priceFormattingRuleSet? . currencySymbolOverride ( currencyCode: newFormatter. currencyCode) {
6463 newFormatter = makePriceFormatterForSK1 (
6564 with: locale,
6665 currencySymbolOverride: currencySymbolOverride
6766 )
6867 }
69-
68+
7069 formatter = newFormatter
7170
7271 return newFormatter
@@ -110,7 +109,7 @@ final class PriceFormatterProvider: Sendable {
110109 return newFormatter
111110 }
112111 }
113-
112+
114113 private func createPriceFormatterIfNeeded(
115114 cachedPriceFormatter: NumberFormatter ? ,
116115 currencyCode: String ,
@@ -119,23 +118,22 @@ final class PriceFormatterProvider: Sendable {
119118 let currencySymbolOverride = priceFormattingRuleSet? . currencySymbolOverride (
120119 currencyCode: currencyCode
121120 )
122-
121+
123122 if let formatter = cachedPriceFormatter as? CurrencySymbolOverridingPriceFormatter {
124123 if formatter. currencyCode == currencyCode, formatter. locale == locale, formatter. currencySymbolOverride == currencySymbolOverride {
125124 return formatter
126125 }
127- }
128- else if let formatter = cachedPriceFormatter, formatter. currencyCode == currencyCode, formatter. locale == locale {
126+ } else if let formatter = cachedPriceFormatter, formatter. currencyCode == currencyCode, formatter. locale == locale {
129127 return formatter
130128 }
131-
129+
132130 return makePriceFormatter (
133131 with: currencyCode,
134132 locale: locale,
135133 currencySymbolOverride: currencySymbolOverride
136134 )
137135 }
138-
136+
139137 private func makePriceFormatter(
140138 with currencyCode: String ,
141139 locale: Locale ,
@@ -157,23 +155,23 @@ final class PriceFormatterProvider: Sendable {
157155}
158156
159157class CurrencySymbolOverridingPriceFormatter : NumberFormatter , @unchecked Sendable {
160-
158+
161159 let currencySymbolOverride : PriceFormattingRuleSet . CurrencySymbolOverride
162160 private var numberFormatterCache = [ PriceFormattingRuleSet . CurrencySymbolOverride. PluralRule: NumberFormatter] ( )
163-
161+
164162 init ( currencySymbolOverride: PriceFormattingRuleSet . CurrencySymbolOverride ) {
165163 self . currencySymbolOverride = currencySymbolOverride
166164 super. init ( )
167165 }
168-
166+
169167 required init ? ( coder: NSCoder ) {
170168 fatalError ( " init(coder:) has not been implemented " )
171169 }
172-
170+
173171 override func string( from number: NSNumber ) -> String ? {
174172 formatter ( for: rule ( for: number) ) . string ( from: number)
175173 }
176-
174+
177175 /// Cardinal plural selection per CLDR/ICU baseline:
178176 /// - Non-integers → .other
179177 /// - Integers: 0 → .zero, 1 → .one, 2 → .two, else → .other
@@ -184,11 +182,11 @@ class CurrencySymbolOverridingPriceFormatter: NumberFormatter, @unchecked Sendab
184182
185183 // Guard weird numerics
186184 if n. isNaN || n. isInfinite { return . other }
187-
185+
188186 guard let intValue = Int64 ( exactly: n) else {
189187 return . other
190188 }
191-
189+
192190 // Check if value has any fractional part
193191 let isInteger = n == Double ( intValue)
194192
@@ -203,12 +201,12 @@ class CurrencySymbolOverridingPriceFormatter: NumberFormatter, @unchecked Sendab
203201 default : return . other
204202 }
205203 }
206-
204+
207205 private func formatter( for rule: PriceFormattingRuleSet . CurrencySymbolOverride . PluralRule ) -> NumberFormatter {
208206 if let formatter = numberFormatterCache [ rule] {
209207 return formatter
210208 }
211-
209+
212210 let formatter = NumberFormatter ( )
213211 formatter. numberStyle = numberStyle
214212 formatter. locale = locale
0 commit comments