@@ -405,15 +405,39 @@ extension NSString {
405
405
}
406
406
407
407
public func rangeOfCharacterFromSet( searchSet: NSCharacterSet ) -> NSRange {
408
- NSUnimplemented ( )
408
+ return rangeOfCharacterFromSet ( searchSet , options : [ ] )
409
409
}
410
410
411
411
public func rangeOfCharacterFromSet( searchSet: NSCharacterSet , options mask: NSStringCompareOptions ) -> NSRange {
412
- NSUnimplemented ( )
412
+ return rangeOfCharacterFromSet ( searchSet , options : mask , range : NSMakeRange ( 0 , length ) )
413
413
}
414
414
415
415
public func rangeOfCharacterFromSet( searchSet: NSCharacterSet , options mask: NSStringCompareOptions , range searchRange: NSRange ) -> NSRange {
416
- NSUnimplemented ( )
416
+ if mask. contains ( . RegularExpressionSearch) {
417
+ NSUnimplemented ( )
418
+ }
419
+ if searchRange. length == 0 {
420
+ return NSMakeRange ( NSNotFound, 0 )
421
+ }
422
+
423
+ #if os(Linux)
424
+ var cfflags = CFStringCompareFlags ( mask. rawValue)
425
+ if mask. contains ( . LiteralSearch) {
426
+ cfflags |= UInt ( kCFCompareNonliteral)
427
+ }
428
+ #else
429
+ var cfflags = CFStringCompareFlags ( rawValue: mask. rawValue)
430
+ if mask. contains ( . LiteralSearch) {
431
+ cfflags. unionInPlace ( . CompareNonliteral)
432
+ }
433
+ #endif
434
+ var result = CFRangeMake ( kCFNotFound, 0 )
435
+
436
+ if CFStringFindCharacterFromSet ( _cfObject, searchSet. _cfObject, CFRangeMake ( searchRange. location, searchRange. length) , cfflags, & result) {
437
+ return NSMakeRange ( result. location, result. length)
438
+ } else {
439
+ return NSMakeRange ( NSNotFound, 0 )
440
+ }
417
441
}
418
442
419
443
public func rangeOfComposedCharacterSequenceAtIndex( index: Int ) -> NSRange {
0 commit comments