Skip to content

Commit 9cf3489

Browse files
woxtucompnerd
authored andcommitted
Fix UserDefaults.double(forKey:) behavior
1 parent 3b034eb commit 9cf3489

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

Sources/Foundation/UserDefaults.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,15 @@ open class UserDefaults: NSObject {
235235
if let bVal = aVal as? Double {
236236
return bVal
237237
}
238+
if let bVal = aVal as? Bool {
239+
return NSNumber(value: bVal).doubleValue
240+
}
241+
if let bVal = aVal as? Int {
242+
return NSNumber(value: bVal).doubleValue
243+
}
244+
if let bVal = aVal as? Float {
245+
return NSNumber(value: bVal).doubleValue
246+
}
238247
if let bVal = aVal as? String {
239248
return NSString(string: bVal).doubleValue
240249
}

Tests/Foundation/Tests/TestUserDefaults.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ class TestUserDefaults : XCTestCase {
3636
("test_setValue_FloatFromInt", test_setValue_FloatFromInt ),
3737
("test_setValue_FloatFromDouble", test_setValue_FloatFromDouble ),
3838
("test_setValue_FloatFromString", test_setValue_FloatFromString ),
39+
("test_setValue_DoubleFromBool", test_setValue_DoubleFromBool ),
40+
("test_setValue_DoubleFromInt", test_setValue_DoubleFromInt ),
41+
("test_setValue_DoubleFromFloat", test_setValue_DoubleFromFloat ),
3942
("test_setValue_DoubleFromString", test_setValue_DoubleFromString ),
4043
("test_setValue_StringFromBool", test_setValue_StringFromBool ),
4144
("test_setValue_StringFromInt", test_setValue_StringFromInt ),
@@ -310,6 +313,33 @@ class TestUserDefaults : XCTestCase {
310313
XCTAssertEqual(defaults.float(forKey: "key1"), 1234)
311314
}
312315

316+
func test_setValue_DoubleFromBool() {
317+
let defaults = UserDefaults.standard
318+
319+
// Register a boolean default value. UserDefaults.double(forKey:) is supposed to return the converted Double value
320+
defaults.set(true, forKey: "key1")
321+
322+
XCTAssertEqual(defaults.double(forKey: "key1"), 1)
323+
}
324+
325+
func test_setValue_DoubleFromInt() {
326+
let defaults = UserDefaults.standard
327+
328+
// Register an integer default value. UserDefaults.double(forKey:) is supposed to return the converted Double value
329+
defaults.set(42, forKey: "key1")
330+
331+
XCTAssertEqual(defaults.double(forKey: "key1"), 42)
332+
}
333+
334+
func test_setValue_DoubleFromFloat() {
335+
let defaults = UserDefaults.standard
336+
337+
// Register a float default value. UserDefaults.double(forKey:) is supposed to return the converted Double value
338+
defaults.set(12.34 as Float, forKey: "key1")
339+
340+
XCTAssertEqual(defaults.double(forKey: "key1"), Double(12.34 as Float))
341+
}
342+
313343
func test_setValue_DoubleFromString() {
314344
let defaults = UserDefaults.standard
315345

0 commit comments

Comments
 (0)