Skip to content

Commit 16f93e7

Browse files
woxtucompnerd
authored andcommitted
Fix UserDefaults.float(forKey:) behavior
1 parent cc75ff5 commit 16f93e7

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

Sources/Foundation/UserDefaults.swift

+9
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,15 @@ open class UserDefaults: NSObject {
213213
if let bVal = aVal as? Float {
214214
return bVal
215215
}
216+
if let bVal = aVal as? Bool {
217+
return NSNumber(value: bVal).floatValue
218+
}
219+
if let bVal = aVal as? Int {
220+
return NSNumber(value: bVal).floatValue
221+
}
222+
if let bVal = aVal as? Double {
223+
return NSNumber(value: bVal).floatValue
224+
}
216225
if let bVal = aVal as? String {
217226
return NSString(string: bVal).floatValue
218227
}

Tests/Foundation/Tests/TestUserDefaults.swift

+40
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ class TestUserDefaults : XCTestCase {
3232
("test_setValue_IntFromFloat", test_setValue_IntFromFloat ),
3333
("test_setValue_IntFromDouble", test_setValue_IntFromDouble ),
3434
("test_setValue_IntFromString", test_setValue_IntFromString ),
35+
("test_setValue_FloatFromBool", test_setValue_FloatFromBool ),
36+
("test_setValue_FloatFromInt", test_setValue_FloatFromInt ),
37+
("test_setValue_FloatFromDouble", test_setValue_FloatFromDouble ),
38+
("test_setValue_FloatFromString", test_setValue_FloatFromString ),
3539
("test_setValue_DoubleFromString", test_setValue_DoubleFromString ),
3640
("test_setValue_StringFromBool", test_setValue_StringFromBool ),
3741
("test_setValue_StringFromInt", test_setValue_StringFromInt ),
@@ -270,6 +274,42 @@ class TestUserDefaults : XCTestCase {
270274
XCTAssertEqual(defaults.integer(forKey: "key1"), 1234)
271275
}
272276

277+
func test_setValue_FloatFromBool() {
278+
let defaults = UserDefaults.standard
279+
280+
// Register a boolean default value. UserDefaults.float(forKey:) is supposed to return the converted Float value
281+
defaults.set(true, forKey: "key1")
282+
283+
XCTAssertEqual(defaults.float(forKey: "key1"), 1)
284+
}
285+
286+
func test_setValue_FloatFromInt() {
287+
let defaults = UserDefaults.standard
288+
289+
// Register an integer default value. UserDefaults.float(forKey:) is supposed to return the converted Float value
290+
defaults.set(42, forKey: "key1")
291+
292+
XCTAssertEqual(defaults.float(forKey: "key1"), 42)
293+
}
294+
295+
func test_setValue_FloatFromDouble() {
296+
let defaults = UserDefaults.standard
297+
298+
// Register a double default value. UserDefaults.float(forKey:) is supposed to return the converted Float value
299+
defaults.set(12.34, forKey: "key1")
300+
301+
XCTAssertEqual(defaults.float(forKey: "key1"), 12.34)
302+
}
303+
304+
func test_setValue_FloatFromString() {
305+
let defaults = UserDefaults.standard
306+
307+
// Register a string default value. UserDefaults.float(forKey:) is supposed to return the parsed Float value
308+
defaults.set("1234", forKey: "key1")
309+
310+
XCTAssertEqual(defaults.float(forKey: "key1"), 1234)
311+
}
312+
273313
func test_setValue_DoubleFromString() {
274314
let defaults = UserDefaults.standard
275315

0 commit comments

Comments
 (0)