https://github.com/eneko/sync
Run asynchronous blocks synchronously
https://github.com/eneko/sync
swift sync synchronizer synchronous
Last synced: 5 months ago
JSON representation
Run asynchronous blocks synchronously
- Host: GitHub
- URL: https://github.com/eneko/sync
- Owner: eneko
- License: mit
- Created: 2016-02-25T22:21:51.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2016-11-24T17:08:51.000Z (over 8 years ago)
- Last Synced: 2025-01-10T19:15:56.823Z (6 months ago)
- Topics: swift, sync, synchronizer, synchronous
- Language: Swift
- Size: 11.7 KB
- Stars: 7
- Watchers: 3
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Sync
Run asynchronous blocks synchronously# Installation
With cocoapods:
```
pod 'Sync'
```Without cocoapods:
1. Grab the `Sync.swift` file form the `Sources` folder and add it to your project.
Or:
1. Clone the repo
2. Build the framework with `archive`
3. Add the `Sync.framework` bundle to your project# Usage
Similar to `semaphores` or `dispatch_group`, `Sync` mus be notified when the asynchronous block is complete. The asynchronous code can be running on a background thread:```swift
let sync = Sync()
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
// Your async code in background thread
sync.complete()
}
sync.wait()
```...or in the main thread:
```swift
let sync = Sync()
dispatch_async(dispatch_get_main_queue()) {
// Your async code in main thread
sync.complete()
}
sync.wait()
````Sync` waits indefinitely for the block to complete unless a timeout is specified:
```swift
let sync = Sync()
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
// Your async code in background thread
sync.complete()
}
sync.wait(seconds: 5) // wait at most 5 seconds and continue
```## Synchronous Methods
Sync works even in cases where the completion block is called on the main thread, avoiding a deadlock. This makes it very simple to write synchronous methods that can be run on a command line application or inside an NSOperation or background thread.```swift
func locationForString(name: String) -> CLLocation? {
var location: CLLocation?
let sync = Sync()
CLGeocoder().geocodeAddressString(name) { (placemarks, error) in
location = placemarks?.first?.location
sync.complete()
}
sync.wait(seconds: 5)
return location
}let location = locationForString("San Francisco")
print(location.coordinate)
```