Skip to content

Instantly share code, notes, and snippets.

View alkozin's full-sized avatar

Alexander Kozin alkozin

  • El Machine
  • Novosibirsk, Russian Federation
  • 22:03 (UTC +07:00)
View GitHub Profile
//Look to geolocation permissions request to illustrate.
//Request is constructed according to `with` object
//
//Ask always permissions only if `ask` `with` `CLAuthorizationStatus.authorizedAlways` input argument
//Otherwise `ask` only in use permissions
//
extension CLAuthorizationStatus: Asking {
static func ask<E>(with: Any?, in pipe: Pipe, expect: Expect<E>) {
let source = with as? CLLocationManager ?? pipe.get()
| .every { T in
} | .one { U in
} | .while { E in
true
}
| .every { T in
} | .one { U in
} | .any { some in
} | .all { last in
}
|{ (permission: CLAuthorizationStatus) in
}
extension CLLocation: Asking, Expectable {
static func ask<E>(with: Any?, in pipe: Pipe, expect: Expect<E>) {
let source = with as? CLLocationManager ?? pipe.get()
let handler = { (status: CLAuthorizationStatus) -> Bool in
guard status != .notDetermined else {
return true
}