mirror of
https://github.com/ReactiveX/RxSwift.git
synced 2024-10-05 14:37:29 +03:00
Reachability+Rx now is ReachabilityService
This commit is contained in:
parent
ea628496f1
commit
a35c77c0e0
@ -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 */,
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
}
|
||||
}
|
54
RxExample/RxExample/Services/ReachabilityService.swift
Normal file
54
RxExample/RxExample/Services/ReachabilityService.swift
Normal 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()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user