Skip to content

Instantly share code, notes, and snippets.

@lawrencelomax
Created July 10, 2014 16:47
Show Gist options
  • Save lawrencelomax/133e44c195eb8ea9eb49 to your computer and use it in GitHub Desktop.
Save lawrencelomax/133e44c195eb8ea9eb49 to your computer and use it in GitHub Desktop.
Word Scanner in Swift
// Playground - noun: a place where people can play
import Cocoa
let str = "Foo Bar bannana' basa fist ada-2@🚅 afa2-ff 👍🎭-asd👍 adsa😃da\ndas🎉d"
let whitespaceSet = NSCharacterSet.whitespaceAndNewlineCharacterSet()
enum ScanResult<T> {
case Append(T)
case End
}
func scanWords<T>(string: String, callback: (String, NSRange) -> (ScanResult<T>)) -> [T] {
let scanner = NSScanner(string: string)
var results: [T] = []
while (!scanner.atEnd) {
var substringMaybe: NSString? = nil
let scanned = scanner.scanUpToCharactersFromSet(whitespaceSet, intoString: &substringMaybe)
if (!scanned) {
return results
}
if let substring = substringMaybe as String? {
let range = NSMakeRange(scanner.scanLocation, countElements(substring) )
let result = callback(substring, range)
switch result {
case .End:
return results
case .Append(let value):
results.append(value)
}
}
}
return results
}
let result = scanWords(str, { (string: String, range: NSRange) -> ScanResult<String> in
return .Append(string)
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment