Skip to content

Commit bcb9f1e

Browse files
committed
Fix UserDefaults.double(forKey:) behavior
1 parent ba1e4f6 commit bcb9f1e

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

Sources/Foundation/UserDefaults.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,15 @@ open class UserDefaults: NSObject {
199199
if let bVal = aVal as? Double {
200200
return bVal
201201
}
202+
if let bVal = aVal as? Bool {
203+
return NSNumber(value: bVal).doubleValue
204+
}
205+
if let bVal = aVal as? Int {
206+
return NSNumber(value: bVal).doubleValue
207+
}
208+
if let bVal = aVal as? Float {
209+
return NSNumber(value: bVal).doubleValue
210+
}
202211
if let bVal = aVal as? String {
203212
return NSString(string: bVal).doubleValue
204213
}

Tests/Foundation/Tests/TestUserDefaults.swift

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ class TestUserDefaults : XCTestCase {
2929
("test_setValue_Data", test_setValue_Data ),
3030
("test_setValue_BoolFromString", test_setValue_BoolFromString ),
3131
("test_setValue_IntFromString", test_setValue_IntFromString ),
32+
("test_setValue_DoubleFromBool", test_setValue_DoubleFromBool ),
33+
("test_setValue_DoubleFromInt", test_setValue_DoubleFromInt ),
34+
("test_setValue_DoubleFromFloat", test_setValue_DoubleFromFloat ),
3235
("test_setValue_DoubleFromString", test_setValue_DoubleFromString ),
3336
("test_volatileDomains", test_volatileDomains),
3437
("test_persistentDomain", test_persistentDomain ),
@@ -235,7 +238,34 @@ class TestUserDefaults : XCTestCase {
235238

236239
XCTAssertEqual(defaults.integer(forKey: "key1"), 1234)
237240
}
238-
241+
242+
func test_setValue_DoubleFromBool() {
243+
let defaults = UserDefaults.standard
244+
245+
// Register a boolean default value. UserDefaults.double(forKey:) is supposed to return the converted Double value
246+
defaults.set(true, forKey: "key1")
247+
248+
XCTAssertEqual(defaults.double(forKey: "key1"), 1)
249+
}
250+
251+
func test_setValue_DoubleFromInt() {
252+
let defaults = UserDefaults.standard
253+
254+
// Register an integer default value. UserDefaults.double(forKey:) is supposed to return the converted Double value
255+
defaults.set(42, forKey: "key1")
256+
257+
XCTAssertEqual(defaults.double(forKey: "key1"), 42)
258+
}
259+
260+
func test_setValue_DoubleFromFloat() {
261+
let defaults = UserDefaults.standard
262+
263+
// Register a float default value. UserDefaults.double(forKey:) is supposed to return the converted Double value
264+
defaults.set(12.34 as Float, forKey: "key1")
265+
266+
XCTAssertEqual(defaults.double(forKey: "key1"), Double(12.34 as Float))
267+
}
268+
239269
func test_setValue_DoubleFromString() {
240270
let defaults = UserDefaults.standard
241271

0 commit comments

Comments
 (0)