Created
November 11, 2016 06:41
-
-
Save darrensapalo/c3a97d4d7a64c9accf243c2db0552a2f to your computer and use it in GitHub Desktop.
Separate your code to make it more readable. It makes it easier to debug as well.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import RxSwift | |
example ("Helping Sebastian Roth") { | |
let disposeBag = DisposeBag() | |
// Data model representing the current download progress | |
struct DownloadProgress { | |
var numberOfCompletedDownloads: Int | |
var progress: Float | |
func increaseProgress(progress: Float) -> DownloadProgress { | |
return DownloadProgress(numberOfCompletedDownloads: self.numberOfCompletedDownloads, progress: progress) | |
} | |
func downloadComplete() -> DownloadProgress { | |
return DownloadProgress(numberOfCompletedDownloads: self.numberOfCompletedDownloads + 1, progress: 0) | |
} | |
} | |
// Desired data model | |
class Video { | |
var name = "Video name" | |
var url = "http://www.google.com" | |
var data: String! = "" | |
} | |
// Constants, based on what is to be downloaded | |
let paths = ["url1", "url2", "url3"] | |
let numberOfDownloads = paths.count | |
let percentPerItem : Float = Float(1) / Float(numberOfDownloads) | |
let progressTracker = Variable<DownloadProgress>(DownloadProgress(numberOfCompletedDownloads: 0, progress: 0)) | |
/** | |
Returns the total progress over all the downloads. | |
*/ | |
func computeTotalProgress(currentProgress: DownloadProgress) -> Float { | |
return Float(currentProgress.numberOfCompletedDownloads) * percentPerItem + currentProgress.progress * percentPerItem | |
} | |
/** | |
Observable that handles updating the UI whenever progress changes | |
*/ | |
progressTracker | |
.asObservable() | |
.map(computeTotalProgress) | |
.subscribe(onNext: { currentTotalProgress in | |
// Set progress bar value | |
print("Progress at: \(currentTotalProgress)") | |
}) | |
.addDisposableTo(disposeBag) | |
/** | |
Code to perform a download using Alamofire, given a URL. | |
*/ | |
func downloadVideo (url url: String, index: Int) -> Observable<Video> { | |
return Observable.create { obx in | |
// Perform an alamofire network call | |
// ... Alamofire triggering the progress tracker whenever | |
Array(0..<100).map { Float($0) / 100 }.forEach { p in | |
// Increase progress whenever needed | |
progressTracker.value = progressTracker.value.increaseProgress(progress: p) | |
} | |
// Emit video when finished | |
let result = Video() | |
result.url = url | |
obx.onNext(result) | |
// Mark download as finished | |
progressTracker.value = progressTracker.value.downloadComplete() | |
obx.onCompleted() | |
return Disposables.create() | |
} | |
} | |
func oneDownloadComplete(video: Video) { | |
print("One download done: \(video.url)") | |
} | |
func downloadComplete () { | |
print("Download complete") | |
} | |
Observable | |
.from(paths) | |
.flatMapWithIndex(downloadVideo) | |
.subscribe (onNext: oneDownloadComplete, onCompleted: downloadComplete) | |
.addDisposableTo(disposeBag) | |
} | |
// -- output -- | |
--- Helping Sebastian Roth example --- | |
Progress at: 0.0 | |
Progress at: 0.0 | |
Progress at: 0.00333333 | |
Progress at: 0.00666667 | |
Progress at: 0.01 | |
Progress at: 0.0133333 | |
Progress at: 0.0166667 | |
Progress at: 0.02 | |
Progress at: 0.0233333 | |
Progress at: 0.0266667 | |
Progress at: 0.03 | |
Progress at: 0.0333333 | |
Progress at: 0.0366667 | |
Progress at: 0.04 | |
Progress at: 0.0433333 | |
Progress at: 0.0466667 | |
Progress at: 0.05 | |
Progress at: 0.0533333 | |
Progress at: 0.0566667 | |
Progress at: 0.06 | |
Progress at: 0.0633333 | |
Progress at: 0.0666667 | |
Progress at: 0.07 | |
Progress at: 0.0733333 | |
Progress at: 0.0766667 | |
Progress at: 0.08 | |
Progress at: 0.0833333 | |
Progress at: 0.0866667 | |
Progress at: 0.09 | |
Progress at: 0.0933333 | |
Progress at: 0.0966667 | |
Progress at: 0.1 | |
Progress at: 0.103333 | |
Progress at: 0.106667 | |
Progress at: 0.11 | |
Progress at: 0.113333 | |
Progress at: 0.116667 | |
Progress at: 0.12 | |
Progress at: 0.123333 | |
Progress at: 0.126667 | |
Progress at: 0.13 | |
Progress at: 0.133333 | |
Progress at: 0.136667 | |
Progress at: 0.14 | |
Progress at: 0.143333 | |
Progress at: 0.146667 | |
Progress at: 0.15 | |
Progress at: 0.153333 | |
Progress at: 0.156667 | |
Progress at: 0.16 | |
Progress at: 0.163333 | |
Progress at: 0.166667 | |
Progress at: 0.17 | |
Progress at: 0.173333 | |
Progress at: 0.176667 | |
Progress at: 0.18 | |
Progress at: 0.183333 | |
Progress at: 0.186667 | |
Progress at: 0.19 | |
Progress at: 0.193333 | |
Progress at: 0.196667 | |
Progress at: 0.2 | |
Progress at: 0.203333 | |
Progress at: 0.206667 | |
Progress at: 0.21 | |
Progress at: 0.213333 | |
Progress at: 0.216667 | |
Progress at: 0.22 | |
Progress at: 0.223333 | |
Progress at: 0.226667 | |
Progress at: 0.23 | |
Progress at: 0.233333 | |
Progress at: 0.236667 | |
Progress at: 0.24 | |
Progress at: 0.243333 | |
Progress at: 0.246667 | |
Progress at: 0.25 | |
Progress at: 0.253333 | |
Progress at: 0.256667 | |
Progress at: 0.26 | |
Progress at: 0.263333 | |
Progress at: 0.266667 | |
Progress at: 0.27 | |
Progress at: 0.273333 | |
Progress at: 0.276667 | |
Progress at: 0.28 | |
Progress at: 0.283333 | |
Progress at: 0.286667 | |
Progress at: 0.29 | |
Progress at: 0.293333 | |
Progress at: 0.296667 | |
Progress at: 0.3 | |
Progress at: 0.303333 | |
Progress at: 0.306667 | |
Progress at: 0.31 | |
Progress at: 0.313333 | |
Progress at: 0.316667 | |
Progress at: 0.32 | |
Progress at: 0.323333 | |
Progress at: 0.326667 | |
Progress at: 0.33 | |
One download done: url1 | |
Progress at: 0.333333 | |
Progress at: 0.333333 | |
Progress at: 0.336667 | |
Progress at: 0.34 | |
Progress at: 0.343333 | |
Progress at: 0.346667 | |
Progress at: 0.35 | |
Progress at: 0.353333 | |
Progress at: 0.356667 | |
Progress at: 0.36 | |
Progress at: 0.363333 | |
Progress at: 0.366667 | |
Progress at: 0.37 | |
Progress at: 0.373333 | |
Progress at: 0.376667 | |
Progress at: 0.38 | |
Progress at: 0.383333 | |
Progress at: 0.386667 | |
Progress at: 0.39 | |
Progress at: 0.393333 | |
Progress at: 0.396667 | |
Progress at: 0.4 | |
Progress at: 0.403333 | |
Progress at: 0.406667 | |
Progress at: 0.41 | |
Progress at: 0.413333 | |
Progress at: 0.416667 | |
Progress at: 0.42 | |
Progress at: 0.423333 | |
Progress at: 0.426667 | |
Progress at: 0.43 | |
Progress at: 0.433333 | |
Progress at: 0.436667 | |
Progress at: 0.44 | |
Progress at: 0.443333 | |
Progress at: 0.446667 | |
Progress at: 0.45 | |
Progress at: 0.453333 | |
Progress at: 0.456667 | |
Progress at: 0.46 | |
Progress at: 0.463333 | |
Progress at: 0.466667 | |
Progress at: 0.47 | |
Progress at: 0.473333 | |
Progress at: 0.476667 | |
Progress at: 0.48 | |
Progress at: 0.483333 | |
Progress at: 0.486667 | |
Progress at: 0.49 | |
Progress at: 0.493333 | |
Progress at: 0.496667 | |
Progress at: 0.5 | |
Progress at: 0.503333 | |
Progress at: 0.506667 | |
Progress at: 0.51 | |
Progress at: 0.513333 | |
Progress at: 0.516667 | |
Progress at: 0.52 | |
Progress at: 0.523333 | |
Progress at: 0.526667 | |
Progress at: 0.53 | |
Progress at: 0.533333 | |
Progress at: 0.536667 | |
Progress at: 0.54 | |
Progress at: 0.543333 | |
Progress at: 0.546667 | |
Progress at: 0.55 | |
Progress at: 0.553333 | |
Progress at: 0.556667 | |
Progress at: 0.56 | |
Progress at: 0.563333 | |
Progress at: 0.566667 | |
Progress at: 0.57 | |
Progress at: 0.573333 | |
Progress at: 0.576667 | |
Progress at: 0.58 | |
Progress at: 0.583333 | |
Progress at: 0.586667 | |
Progress at: 0.59 | |
Progress at: 0.593333 | |
Progress at: 0.596667 | |
Progress at: 0.6 | |
Progress at: 0.603333 | |
Progress at: 0.606667 | |
Progress at: 0.61 | |
Progress at: 0.613333 | |
Progress at: 0.616667 | |
Progress at: 0.62 | |
Progress at: 0.623333 | |
Progress at: 0.626667 | |
Progress at: 0.63 | |
Progress at: 0.633333 | |
Progress at: 0.636667 | |
Progress at: 0.64 | |
Progress at: 0.643333 | |
Progress at: 0.646667 | |
Progress at: 0.65 | |
Progress at: 0.653333 | |
Progress at: 0.656667 | |
Progress at: 0.66 | |
Progress at: 0.663333 | |
One download done: url2 | |
Progress at: 0.666667 | |
Progress at: 0.666667 | |
Progress at: 0.67 | |
Progress at: 0.673333 | |
Progress at: 0.676667 | |
Progress at: 0.68 | |
Progress at: 0.683333 | |
Progress at: 0.686667 | |
Progress at: 0.69 | |
Progress at: 0.693333 | |
Progress at: 0.696667 | |
Progress at: 0.7 | |
Progress at: 0.703333 | |
Progress at: 0.706667 | |
Progress at: 0.71 | |
Progress at: 0.713333 | |
Progress at: 0.716667 | |
Progress at: 0.72 | |
Progress at: 0.723333 | |
Progress at: 0.726667 | |
Progress at: 0.73 | |
Progress at: 0.733333 | |
Progress at: 0.736667 | |
Progress at: 0.74 | |
Progress at: 0.743333 | |
Progress at: 0.746667 | |
Progress at: 0.75 | |
Progress at: 0.753333 | |
Progress at: 0.756667 | |
Progress at: 0.76 | |
Progress at: 0.763333 | |
Progress at: 0.766667 | |
Progress at: 0.77 | |
Progress at: 0.773333 | |
Progress at: 0.776667 | |
Progress at: 0.78 | |
Progress at: 0.783333 | |
Progress at: 0.786667 | |
Progress at: 0.79 | |
Progress at: 0.793333 | |
Progress at: 0.796667 | |
Progress at: 0.8 | |
Progress at: 0.803333 | |
Progress at: 0.806667 | |
Progress at: 0.81 | |
Progress at: 0.813333 | |
Progress at: 0.816667 | |
Progress at: 0.82 | |
Progress at: 0.823333 | |
Progress at: 0.826667 | |
Progress at: 0.83 | |
Progress at: 0.833333 | |
Progress at: 0.836667 | |
Progress at: 0.84 | |
Progress at: 0.843333 | |
Progress at: 0.846667 | |
Progress at: 0.85 | |
Progress at: 0.853333 | |
Progress at: 0.856667 | |
Progress at: 0.86 | |
Progress at: 0.863333 | |
Progress at: 0.866667 | |
Progress at: 0.87 | |
Progress at: 0.873333 | |
Progress at: 0.876667 | |
Progress at: 0.88 | |
Progress at: 0.883333 | |
Progress at: 0.886667 | |
Progress at: 0.89 | |
Progress at: 0.893333 | |
Progress at: 0.896667 | |
Progress at: 0.9 | |
Progress at: 0.903333 | |
Progress at: 0.906667 | |
Progress at: 0.91 | |
Progress at: 0.913333 | |
Progress at: 0.916667 | |
Progress at: 0.92 | |
Progress at: 0.923333 | |
Progress at: 0.926667 | |
Progress at: 0.93 | |
Progress at: 0.933333 | |
Progress at: 0.936667 | |
Progress at: 0.94 | |
Progress at: 0.943333 | |
Progress at: 0.946667 | |
Progress at: 0.95 | |
Progress at: 0.953333 | |
Progress at: 0.956667 | |
Progress at: 0.96 | |
Progress at: 0.963333 | |
Progress at: 0.966667 | |
Progress at: 0.97 | |
Progress at: 0.973333 | |
Progress at: 0.976667 | |
Progress at: 0.98 | |
Progress at: 0.983333 | |
Progress at: 0.986667 | |
Progress at: 0.99 | |
Progress at: 0.993333 | |
Progress at: 0.996667 | |
One download done: url3 | |
Progress at: 1.0 | |
Download complete |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment