Skip to content

Commit fbafb3f

Browse files
committed
implement NSString.boolValue
1 parent 6c1cab3 commit fbafb3f

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

Foundation/NSString.swift

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,16 @@ extension NSString {
488488

489489
public var boolValue: Bool {
490490
get {
491-
NSUnimplemented()
491+
let scanner = NSScanner(string: _swiftObject)
492+
// skip initial whitespace if present
493+
scanner.scanCharactersFromSet(NSCharacterSet.whitespaceCharacterSet())
494+
// scan a single optional '+' or '-' character, followed by zeroes
495+
if scanner.scanString(string: "+") == nil {
496+
scanner.scanString(string: "-")
497+
}
498+
// scan any following zeroes
499+
scanner.scanCharactersFromSet(NSCharacterSet(charactersInString: "0"))
500+
return scanner.scanCharactersFromSet(NSCharacterSet(charactersInString: "tTyY123456789")) != nil
492501
}
493502
}
494503

TestFoundation/TestNSString.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class TestNSString : XCTestCase {
2121

2222
var allTests : [(String, () -> ())] {
2323
return [
24+
("test_boolValue", test_boolValue ),
2425
("test_BridgeConstruction", test_BridgeConstruction ),
2526
("test_isEqualToStringWithSwiftString", test_isEqualToStringWithSwiftString ),
2627
("test_isEqualToObjectWithNSString", test_isEqualToObjectWithNSString ),
@@ -37,6 +38,17 @@ class TestNSString : XCTestCase {
3738
("test_rangeOfCharacterFromSet", test_rangeOfCharacterFromSet ),
3839
]
3940
}
41+
42+
func test_boolValue() {
43+
let trueStrings: [NSString] = ["t", "true", "TRUE", "tRuE", "yes", "YES", "1", "+000009"]
44+
for string in trueStrings {
45+
XCTAssert(string.boolValue)
46+
}
47+
let falseStrings: [NSString] = ["false", "FALSE", "fAlSe", "no", "NO", "0", "<true>", "_true", "-00000"]
48+
for string in falseStrings {
49+
XCTAssertFalse(string.boolValue)
50+
}
51+
}
4052

4153
func test_BridgeConstruction() {
4254
let literalConversion: NSString = "literal"

0 commit comments

Comments
 (0)