Skip to content

Instantly share code, notes, and snippets.

@danielCarlosCE
Created March 20, 2017 17:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danielCarlosCE/4ff4861f265a08683353291a71467bda to your computer and use it in GitHub Desktop.
Save danielCarlosCE/4ff4861f265a08683353291a71467bda to your computer and use it in GitHub Desktop.
A Swift extension to Google's GMSPlacePicker. Decoupling our code a little bit more ;)
enum Result<T> {
case success(T)
case failure(Error)
}
protocol PlacePicker {
func pick(result: @escaping (Result<Place>) -> Void)
}
protocol Place {
var extendedName: String {get}
}
extension GMSPlacePicker: PlacePicker {
func pick(result: @escaping (Result<Place>) -> Void) {
pickPlace { (place: GMSPlace?, error: Error?) in
guard let place = place else {
let errorFoo = NSError(domain: "foo", code: -1, userInfo: nil)
result(.failure(errorFoo))
return
}
if let error = error {
result(.failure(error))
return
}
result(.success(place))
}
}
}
extension GMSPlace: Place {
// name - city - state
var extendedName: String {
let localName = name
let city = addressComponents?.filter { $0.type == "locality" }.first?.name
let state = addressComponents?.filter { $0.type == "administrative_area_level_1" }.first?.name
var extended = "\(localName)"
if let city = city {
extended.append(" - \(city)")
}
if let state = state {
extended.append(" - \(state)")
}
return extended
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment