Skip to content

Instantly share code, notes, and snippets.

@danielctull
Last active August 29, 2015 14:28
Show Gist options
  • Save danielctull/1396bb194a9b6ac9943f to your computer and use it in GitHub Desktop.
Save danielctull/1396bb194a9b6ac9943f to your computer and use it in GitHub Desktop.
Using Optional.Some() to condense two guard statements into one.
var phone: String? {
guard
let phone = phoneNumberTextField?.text,
let phoneDetector = try? NSDataDetector(types: NSTextCheckingType.PhoneNumber.rawValue),
let range = pure(NSRange(location: 0, length: phone.startIndex.distanceTo(phone.endIndex))),
let matches = pure(phoneDetector.matchesInString(phone, options: [], range: range))
where matches.count > 0
else {
return nil
}
return phone
}
func pure<T>(a: T) -> T? {
return .Some(a)
}
var phone: String? {
guard
let phone = phoneNumberTextField?.text,
let phoneDetector = try? NSDataDetector(types: NSTextCheckingType.PhoneNumber.rawValue),
let range = Optional.Some(NSRange(location: 0, length: phone.startIndex.distanceTo(phone.endIndex))),
let matches = Optional.Some(phoneDetector.matchesInString(phone, options: [], range: range))
where matches.count > 0
else {
return nil
}
return phone
}
var phone: String? {
guard
let phone = phoneNumberTextField?.text,
let phoneDetector = try? NSDataDetector(types: NSTextCheckingType.PhoneNumber.rawValue)
else {
return nil
}
let range = NSRange(location: 0, length: phone.startIndex.distanceTo(phone.endIndex))
let matches = phoneDetector.matchesInString(phone, options: [], range: range)
if matches.count == 0 {
return nil
}
return phone
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment