Skip to content

Commit 5cfdac5

Browse files
author
Pushkar N Kulkarni
committed
Allow numeric types in NSNumberFormatter.string(for:)[SR-2477]
1 parent 31ce31b commit 5cfdac5

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

Foundation/NSNumberFormatter.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ open class NumberFormatter : Formatter {
8585
open func objectValue(_ string: String, range: inout NSRange) throws -> Any? { NSUnimplemented() }
8686

8787
open override func string(for obj: Any) -> String? {
88-
guard let number = obj as? NSNumber else { return nil }
88+
//we need to Swift's numeric types here - Int, Double et al.
89+
guard let number = _SwiftValue.store(obj) as? NSNumber else { return nil }
8990
return string(from: number)
9091
}
9192

TestFoundation/TestNSNumberFormatter.swift

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ class TestNSNumberFormatter: XCTestCase {
5252
("test_currencyGroupingSeparator", test_currencyGroupingSeparator),
5353
("test_lenient", test_lenient),
5454
("test_minimumSignificantDigits", test_minimumSignificantDigits),
55-
("test_maximumSignificantDigits", test_maximumSignificantDigits)
55+
("test_maximumSignificantDigits", test_maximumSignificantDigits),
56+
("test_stringFor", test_stringFor)
5657
]
5758
}
5859

@@ -341,5 +342,18 @@ class TestNSNumberFormatter: XCTestCase {
341342
let formattedString = numberFormatter.string(from: 42.42424242)
342343
XCTAssertEqual(formattedString, "42.4")
343344
}
345+
346+
func test_stringFor() {
347+
let numberFormatter = NumberFormatter()
348+
XCTAssertEqual(numberFormatter.string(for: 10)!, "10")
349+
XCTAssertEqual(numberFormatter.string(for: 3.14285714285714)!, "3")
350+
XCTAssertEqual(numberFormatter.string(for: true)!, "1")
351+
XCTAssertEqual(numberFormatter.string(for: false)!, "0")
352+
XCTAssertNil(numberFormatter.string(for: [1,2]))
353+
XCTAssertEqual(numberFormatter.string(for: NSNumber(value: 99.1))!, "99")
354+
XCTAssertNil(numberFormatter.string(for: "NaN"))
355+
XCTAssertNil(numberFormatter.string(for: NSString(string: "NaN")))
356+
}
357+
344358
}
345359

0 commit comments

Comments
 (0)