Reachability+Rx now is ReachabilityService

This commit is contained in:
Vodovozov Gleb 2015-10-24 11:20:18 +08:00
parent ea628496f1
commit a35c77c0e0
3 changed files with 58 additions and 47 deletions

View File

@ -19,11 +19,9 @@
07E3C2331B03605B0010338D /* Dependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07E3C2321B03605B0010338D /* Dependencies.swift */; };
B1B7C3D01BE006870076934E /* TakeLast.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1B7C3CF1BE006870076934E /* TakeLast.swift */; };
B18F3BBC1BD92EC8000AAC79 /* Reachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = B18F3BBB1BD92EC8000AAC79 /* Reachability.swift */; };
B18F3BBE1BD93C2E000AAC79 /* Reachability+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = B18F3BBD1BD93C2E000AAC79 /* Reachability+Rx.swift */; };
B18F3BBF1BD93DFF000AAC79 /* Reachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = B18F3BBB1BD92EC8000AAC79 /* Reachability.swift */; };
B18F3BC01BD93DFF000AAC79 /* Reachability+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = B18F3BBD1BD93C2E000AAC79 /* Reachability+Rx.swift */; };
B18F3BC11BD93E00000AAC79 /* Reachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = B18F3BBB1BD92EC8000AAC79 /* Reachability.swift */; };
B18F3BC21BD93E00000AAC79 /* Reachability+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = B18F3BBD1BD93C2E000AAC79 /* Reachability+Rx.swift */; };
B18F3BE21BDB2E8F000AAC79 /* ReachabilityService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B18F3BE11BDB2E8F000AAC79 /* ReachabilityService.swift */; };
C803973A1BD3E17D009D8B26 /* ActivityIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C80397391BD3E17D009D8B26 /* ActivityIndicator.swift */; };
C803973B1BD3E17D009D8B26 /* ActivityIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C80397391BD3E17D009D8B26 /* ActivityIndicator.swift */; };
C80397491BD3E9A6009D8B26 /* GitHubSearchRepositoriesAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C80397481BD3E9A6009D8B26 /* GitHubSearchRepositoriesAPI.swift */; };
@ -460,7 +458,7 @@
07E3C2321B03605B0010338D /* Dependencies.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Dependencies.swift; path = Examples/Dependencies.swift; sourceTree = "<group>"; };
B1B7C3CF1BE006870076934E /* TakeLast.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TakeLast.swift; sourceTree = "<group>"; };
B18F3BBB1BD92EC8000AAC79 /* Reachability.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Reachability.swift; sourceTree = "<group>"; };
B18F3BBD1BD93C2E000AAC79 /* Reachability+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Reachability+Rx.swift"; sourceTree = "<group>"; };
B18F3BE11BDB2E8F000AAC79 /* ReachabilityService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReachabilityService.swift; sourceTree = "<group>"; };
C80397391BD3E17D009D8B26 /* ActivityIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActivityIndicator.swift; sourceTree = "<group>"; };
C80397481BD3E9A6009D8B26 /* GitHubSearchRepositoriesAPI.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitHubSearchRepositoriesAPI.swift; sourceTree = "<group>"; };
C80DDE7A1BCDA952006A1832 /* SkipWhile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SkipWhile.swift; sourceTree = "<group>"; };
@ -886,7 +884,7 @@
C8A2A2CA1B404A1200F11F09 /* Randomizer.swift */,
C80397391BD3E17D009D8B26 /* ActivityIndicator.swift */,
B18F3BBB1BD92EC8000AAC79 /* Reachability.swift */,
B18F3BBD1BD93C2E000AAC79 /* Reachability+Rx.swift */,
B18F3BE11BDB2E8F000AAC79 /* ReachabilityService.swift */,
);
path = Services;
sourceTree = "<group>";
@ -1697,7 +1695,6 @@
C89464D61BC6C2B00055219D /* Producer.swift in Sources */,
C894658A1BC6C2BC0055219D /* RxTableViewDataSourceProxy.swift in Sources */,
C894656F1BC6C2BC0055219D /* DelegateProxyType.swift in Sources */,
B18F3BC21BD93E00000AAC79 /* Reachability+Rx.swift in Sources */,
C89465721BC6C2BC0055219D /* ControlTarget.swift in Sources */,
C89464EC1BC6C2B00055219D /* Observable+Binding.swift in Sources */,
C8297E3A1B6CF905000589EA /* WikipediaSearchViewController.swift in Sources */,
@ -1874,7 +1871,6 @@
0706E1961B14AF5100BA2D3A /* DetailViewController.swift in Sources */,
C88C78991B4012A90061C5AB /* SectionModelType.swift in Sources */,
C83367251AD029AE00C668A7 /* ImageService.swift in Sources */,
B18F3BBE1BD93C2E000AAC79 /* Reachability+Rx.swift in Sources */,
C86E2F471AE5A0CA00C31024 /* WikipediaSearchResult.swift in Sources */,
C80397491BD3E9A6009D8B26 /* GitHubSearchRepositoriesAPI.swift in Sources */,
C890A65A1AEBD28A00AFF7E6 /* GitHubAPI.swift in Sources */,
@ -1891,6 +1887,7 @@
075F13101B4E9D5A000D7861 /* APIWrappersViewController.swift in Sources */,
C83367311AD029AE00C668A7 /* Wireframe.swift in Sources */,
07E300071B14995F00F00100 /* TableViewController.swift in Sources */,
B18F3BE21BDB2E8F000AAC79 /* ReachabilityService.swift in Sources */,
B18F3BBC1BD92EC8000AAC79 /* Reachability.swift in Sources */,
C859B9A41B45C5D900D012D7 /* PartialUpdatesViewController.swift in Sources */,
07E3C2331B03605B0010338D /* Dependencies.swift in Sources */,
@ -1913,7 +1910,6 @@
C88BB8BD1B07E6C90064D411 /* SearchViewModel.swift in Sources */,
C8E9D2AF1BD3FD960079D0DB /* ActivityIndicator.swift in Sources */,
C88BB8BE1B07E6C90064D411 /* ImageService.swift in Sources */,
B18F3BC01BD93DFF000AAC79 /* Reachability+Rx.swift in Sources */,
C88BB8BF1B07E6C90064D411 /* WikipediaSearchResult.swift in Sources */,
C8DF92F61B0B43A4009BCF9A /* IntroductionExampleViewController.swift in Sources */,
B18F3BBF1BD93DFF000AAC79 /* Reachability.swift in Sources */,

View File

@ -1,39 +0,0 @@
//
// Reachability+Rx.swift
// RxExample
//
// Created by Vodovozov Gleb on 22.10.2015.
// Copyright © 2015 Krunoslav Zaher. All rights reserved.
//
import RxSwift
public enum ReachabilityStatus{
case Reachable,Unreachable
}
extension Reachability{
/**
Reactive wrapper for reachability state changes
*/
public var rx_reachable: Observable<ReachabilityStatus> {
return create { observer in
self.whenReachable = { reachability in
observer.on(.Next(.Reachable))
}
self.whenUnreachable = { reachability in
observer.on(.Next(.Unreachable))
}
do{
try self.startNotifier()
}catch let error{
observer.on(.Error(error))
}
return NopDisposable.instance
}
}
}

View File

@ -0,0 +1,54 @@
//
// ReachabilityService.swift
// RxExample
//
// Created by Vodovozov Gleb on 22.10.2015.
// Copyright © 2015 Krunoslav Zaher. All rights reserved.
//
import RxSwift
public enum ReachabilityStatus{
case Reachable,Unreachable
}
class ReachabilityService{
private let reachabilityRef = try! Reachability.reachabilityForInternetConnection()
private let _reachabilityChangedSubject = PublishSubject<ReachabilityStatus>()
private var reachabilityChanged:Observable<ReachabilityStatus> {
get{
return _reachabilityChangedSubject.asObservable()
}
}
// singleton
static let sharedReachabilityService = ReachabilityService()
init(){
reachabilityRef.whenReachable = { reachability in
self._reachabilityChangedSubject.on(.Next(.Reachable))
}
reachabilityRef.whenUnreachable = { reachability in
self._reachabilityChangedSubject.on(.Next(.Unreachable))
}
try! reachabilityRef.startNotifier()
}
}
extension ObservableConvertibleType {
func retryOnBecomesReachable(valueOnFailure:E, reachabilityService:ReachabilityService)->Observable<E>{
return self.asObservable()
.catchError { (e) -> Observable<E> in
reachabilityService
.reachabilityChanged
.flatMap { _ in failWith(e) }
.startWith(valueOnFailure)
}
.retry()
}
}