@@ -405,15 +405,39 @@ extension NSString {
405405 }
406406
407407 public func rangeOfCharacterFromSet( searchSet: NSCharacterSet ) -> NSRange {
408- NSUnimplemented ( )
408+ return rangeOfCharacterFromSet ( searchSet , options : [ ] )
409409 }
410410
411411 public func rangeOfCharacterFromSet( searchSet: NSCharacterSet , options mask: NSStringCompareOptions ) -> NSRange {
412- NSUnimplemented ( )
412+ return rangeOfCharacterFromSet ( searchSet , options : mask , range : NSMakeRange ( 0 , length ) )
413413 }
414414
415415 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+ }
417441 }
418442
419443 public func rangeOfComposedCharacterSequenceAtIndex( index: Int ) -> NSRange {
0 commit comments