Skip to content

Commit e8eed0c

Browse files
committed
Add new extension for NumberFormatter to convert between a number and a string with locale taken into consideration
1 parent 65f6c56 commit e8eed0c

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import Foundation
2+
3+
extension NumberFormatter {
4+
/// Get a double from a string value, with locale taken into consideration.
5+
///
6+
static func double(from string: String, locale: Locale = .current) -> Double? {
7+
let formatter = NumberFormatter()
8+
formatter.locale = locale
9+
let number = formatter.number(from: string)
10+
return number?.doubleValue
11+
}
12+
13+
/// Get a string from a number with locale taken into consideration.
14+
///
15+
static func localizedString(from number: NSNumber, locale: Locale = .current) -> String? {
16+
let formatter = NumberFormatter()
17+
formatter.locale = locale
18+
formatter.usesGroupingSeparator = true
19+
formatter.groupingSize = 3
20+
formatter.formatterBehavior = .behavior10_4
21+
formatter.numberStyle = .decimal
22+
formatter.generatesDecimalNumbers = true
23+
formatter.roundingMode = .halfUp
24+
return formatter.string(from: number)
25+
}
26+
}

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1293,6 +1293,7 @@
12931293
DE525499268C8B32007A5829 /* UIRefreshControl+Woo.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE525498268C8B32007A5829 /* UIRefreshControl+Woo.swift */; };
12941294
DE67D46726B98FD000EFE8DB /* Publisher+WithLatestFrom.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE67D46626B98FD000EFE8DB /* Publisher+WithLatestFrom.swift */; };
12951295
DE67D46926BAA82600EFE8DB /* Publisher+WithLatestFromTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE67D46826BAA82600EFE8DB /* Publisher+WithLatestFromTests.swift */; };
1296+
DE7842ED26F061650030C792 /* NumberFormatter+Localized.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE7842EC26F061650030C792 /* NumberFormatter+Localized.swift */; };
12961297
DE8C94662646990000C94823 /* PluginListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE8C94652646990000C94823 /* PluginListViewController.swift */; };
12971298
DE8C946E264699B600C94823 /* PluginListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE8C946D264699B600C94823 /* PluginListViewModel.swift */; };
12981299
DEC2961F26BD1605005A056B /* ShippingLabelCustomsFormListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEC2961E26BD1605005A056B /* ShippingLabelCustomsFormListViewModel.swift */; };
@@ -2724,6 +2725,7 @@
27242725
DE525498268C8B32007A5829 /* UIRefreshControl+Woo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIRefreshControl+Woo.swift"; sourceTree = "<group>"; };
27252726
DE67D46626B98FD000EFE8DB /* Publisher+WithLatestFrom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Publisher+WithLatestFrom.swift"; sourceTree = "<group>"; };
27262727
DE67D46826BAA82600EFE8DB /* Publisher+WithLatestFromTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Publisher+WithLatestFromTests.swift"; sourceTree = "<group>"; };
2728+
DE7842EC26F061650030C792 /* NumberFormatter+Localized.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NumberFormatter+Localized.swift"; sourceTree = "<group>"; };
27272729
DE8C94652646990000C94823 /* PluginListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PluginListViewController.swift; sourceTree = "<group>"; };
27282730
DE8C946D264699B600C94823 /* PluginListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PluginListViewModel.swift; sourceTree = "<group>"; };
27292731
DEC2961E26BD1605005A056B /* ShippingLabelCustomsFormListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShippingLabelCustomsFormListViewModel.swift; sourceTree = "<group>"; };
@@ -5727,6 +5729,7 @@
57275729
DE4B3B5726A7041800EEF2D8 /* EdgeInsets+Woo.swift */,
57285730
DE67D46626B98FD000EFE8DB /* Publisher+WithLatestFrom.swift */,
57295731
DEC2962626C17AD8005A056B /* ShippingLabelCustomsForm+Localization.swift */,
5732+
DE7842EC26F061650030C792 /* NumberFormatter+Localized.swift */,
57305733
);
57315734
path = Extensions;
57325735
sourceTree = "<group>";
@@ -7498,6 +7501,7 @@
74987501
CE35F11B2343F3B1007B2A6B /* TwoColumnHeadlineFootnoteTableViewCell.swift in Sources */,
74997502
D8C251DB230D288A00F49782 /* PushNotesManager.swift in Sources */,
75007503
0279F0DA252DB4BE0098D7DE /* ProductVariationDetailsFactory.swift in Sources */,
7504+
DE7842ED26F061650030C792 /* NumberFormatter+Localized.swift in Sources */,
75017505
748D34E12148291E00E21A2F /* TopPerformerDataViewController.swift in Sources */,
75027506
02C887712450285100E4470F /* BottomButtonContainerView.swift in Sources */,
75037507
0235BFD9246E959500778909 /* ProductFormActionsFactory.swift in Sources */,

0 commit comments

Comments
 (0)