Skip to content

Commit 8fbe624

Browse files
woxtucompnerd
authored andcommitted
Fix UserDefaults.integer(forKey:) behavior
1 parent c0cd1d1 commit 8fbe624

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
@@ -191,6 +191,15 @@ open class UserDefaults: NSObject {
191191
if let bVal = aVal as? Int {
192192
return bVal
193193
}
194+
if let bVal = aVal as? Bool {
195+
return NSNumber(value: bVal).intValue
196+
}
197+
if let bVal = aVal as? Float {
198+
return NSNumber(value: bVal).intValue
199+
}
200+
if let bVal = aVal as? Double {
201+
return NSNumber(value: bVal).intValue
202+
}
194203
if let bVal = aVal as? String {
195204
return NSString(string: bVal).integerValue
196205
}

Tests/Foundation/Tests/TestUserDefaults.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ class TestUserDefaults : XCTestCase {
2828
("test_setValue_NSData", test_setValue_NSData ),
2929
("test_setValue_Data", test_setValue_Data ),
3030
("test_setValue_BoolFromString", test_setValue_BoolFromString ),
31+
("test_setValue_IntFromBool", test_setValue_IntFromBool ),
32+
("test_setValue_IntFromFloat", test_setValue_IntFromFloat ),
33+
("test_setValue_IntFromDouble", test_setValue_IntFromDouble ),
3134
("test_setValue_IntFromString", test_setValue_IntFromString ),
3235
("test_setValue_DoubleFromString", test_setValue_DoubleFromString ),
3336
("test_setValue_StringFromBool", test_setValue_StringFromBool ),
@@ -231,6 +234,33 @@ class TestUserDefaults : XCTestCase {
231234
XCTAssertEqual(defaults.bool(forKey: "key1"), true)
232235
}
233236

237+
func test_setValue_IntFromBool() {
238+
let defaults = UserDefaults.standard
239+
240+
// Register an int default value as a boolean. UserDefaults.integer(forKey:) is supposed to return the converted Int value
241+
defaults.set(true, forKey: "key1")
242+
243+
XCTAssertEqual(defaults.integer(forKey: "key1"), 1)
244+
}
245+
246+
func test_setValue_IntFromFloat() {
247+
let defaults = UserDefaults.standard
248+
249+
// Register an int default value as a float. UserDefaults.integer(forKey:) is supposed to return the converted Int value
250+
defaults.set(12.34 as Float, forKey: "key1")
251+
252+
XCTAssertEqual(defaults.integer(forKey: "key1"), 12)
253+
}
254+
255+
func test_setValue_IntFromDouble() {
256+
let defaults = UserDefaults.standard
257+
258+
// Register an int default value as a double. UserDefaults.integer(forKey:) is supposed to return the converted Int value
259+
defaults.set(12.34, forKey: "key1")
260+
261+
XCTAssertEqual(defaults.integer(forKey: "key1"), 12)
262+
}
263+
234264
func test_setValue_IntFromString() {
235265
let defaults = UserDefaults.standard
236266

0 commit comments

Comments
 (0)