Skip to content

Commit f8f39d2

Browse files
committed
NSNumber.description(withLocale:) - cache the CFNumberFormatter when locale is nil
1 parent c1ccee8 commit f8f39d2

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

Foundation/NSNumber.swift

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -536,6 +536,13 @@ open class NSNumber : NSValue {
536536
}
537537
}
538538

539+
private static let _numberFormatterForNilLocale: CFNumberFormatter = {
540+
let formatter: CFNumberFormatter
541+
formatter = CFNumberFormatterCreate(nil, CFLocaleCopyCurrent(), kCFNumberFormatterNoStyle)
542+
CFNumberFormatterSetProperty(formatter, kCFNumberFormatterMaxFractionDigits, 15._bridgeToObjectiveC())
543+
return formatter
544+
}()
545+
539546
open func description(withLocale locale: Locale?) -> String {
540547
// CFNumberFormatterCreateStringWithNumber() doesnt like SInt128Type as
541548
// it loses the type when looking it up and treats it as an SInt64Type
@@ -548,9 +555,7 @@ open class NSNumber : NSValue {
548555
let aLocale = locale
549556
let formatter: CFNumberFormatter
550557
if (aLocale == nil) {
551-
formatter = CFNumberFormatterCreate(nil, CFLocaleCopyCurrent(), kCFNumberFormatterNoStyle)
552-
CFNumberFormatterSetProperty(formatter, kCFNumberFormatterMaxFractionDigits, 15._bridgeToObjectiveC())
553-
558+
formatter = NSNumber._numberFormatterForNilLocale
554559
} else {
555560
formatter = CFNumberFormatterCreate(nil, aLocale?._cfObject, kCFNumberFormatterDecimalStyle)
556561
}

0 commit comments

Comments
 (0)