Skip to content

Commit 8d24063

Browse files
committed
Fix NSString.boolValue not matching Darwin Foundation
1 parent 1da6fc8 commit 8d24063

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

Foundation/NSString.swift

+9-5
Original file line numberDiff line numberDiff line change
@@ -633,12 +633,16 @@ extension NSString {
633633
let scanner = Scanner(string: _swiftObject)
634634
// skip initial whitespace if present
635635
let _ = scanner.scanCharactersFromSet(.whitespaces)
636-
// scan a single optional '+' or '-' character, followed by zeroes
637-
if scanner.scanString("+") == nil {
638-
let _ = scanner.scanString("-")
639-
}
636+
// scan a single optional '+' or '-' character
637+
let hasSignal = scanner.scanString("+") != nil || scanner.scanString("-") != nil
640638
// scan any following zeroes
641-
let _ = scanner.scanCharactersFromSet(CharacterSet(charactersIn: "0"))
639+
let hasZeros = scanner.scanCharactersFromSet(CharacterSet(charactersIn: "0")) != nil
640+
641+
// If has leading signal or zeros then scan only numbers
642+
if hasSignal || hasZeros {
643+
return scanner.scanCharactersFromSet(CharacterSet(charactersIn: "123456789")) != nil
644+
}
645+
642646
return scanner.scanCharactersFromSet(CharacterSet(charactersIn: "tTyY123456789")) != nil
643647
}
644648

TestFoundation/TestNSString.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class TestNSString: LoopbackServerTest {
9999
for string in trueStrings {
100100
XCTAssert(string.boolValue)
101101
}
102-
let falseStrings: [NSString] = ["false", "FALSE", "fAlSe", "no", "NO", "0", "<true>", "_true", "-00000"]
102+
let falseStrings: [NSString] = ["false", "FALSE", "fAlSe", "no", "NO", "0", "<true>", "_true", "-00000", "+t", "+", "0t", "++"]
103103
for string in falseStrings {
104104
XCTAssertFalse(string.boolValue)
105105
}

0 commit comments

Comments
 (0)