RxReachability 为 ReachabilitySwift 添加了易于使用的 RxSwift 绑定。您可以对网络可达性变化做出反应,甚至在网络恢复时重试 observables。
RxReachability 添加了以下 RxSwift 绑定
reachabilityChanged: Observable<Reachability>
status: Observable<Reachability.NetworkStatus>
isReachable: Observable<Bool>
isConnected: Observable<Void>
isDisconnected: Observable<Void>
ViewController
或类似组件中存储 Reachability
的实例,并在 viewWillAppear
和 viewWillDisappear
方法中启动/停止通知器。class ViewController: UIViewController {
let disposeBag = DisposeBag()
var reachability: Reachability?
override func viewDidLoad() {
super.viewDidLoad()
reachability = Reachability()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
try? reachability?.startNotifier()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
reachability?.stopNotifier()
}
}
extension ViewController {
let disposeBag = DisposeBag()
func bindReachability() {
reachability?.rx.reachabilityChanged
.subscribe(onNext: { reachability: Reachability in
print("Reachability changed: \(reachability.currentReachabilityStatus)")
})
.disposed(by: disposeBag)
reachability?.rx.status
.subscribe(onNext: { status: Reachability.NetworkStatus in
print("Reachability status changed: \(status)")
})
.disposed(by: disposeBag)
reachability?.rx.isReachable
.subscribe(onNext: { isReachable: Bool in
print("Is reachable: \(isReachable)")
})
.disposed(by: disposeBag)
reachability?.rx.isConnected
.subscribe(onNext: {
print("Is connected")
})
.disposed(by: disposeBag)
reachability?.rx.isDisconnected
.subscribe(onNext: {
print("Is disconnected")
})
.disposed(by: disposeBag)
}
import Reachability
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var reachability: Reachability?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
reachability = Reachability()
try? reachability?.startNotifier()
return true
}
}
import Reachability
import RxReachability
import RxSwift
class ViewController: UIViewController {
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
Reachability.rx.reachabilityChanged
.subscribe(onNext: { reachability: Reachability in
print("Reachability changed: \(reachability.currrentReachabilityStatus)")
})
.disposed(by: disposeBag)
Reachability.rx.status
.subscribe(onNext: { status: Reachability.NetworkStatus in
print("Reachability status changed: \(status)")
})
.disposed(by: disposeBag)
Reachability.rx.isReachable
.subscribe(onNext: { isReachable: Bool in
print("Is reachable: \(isReachable)")
})
.disposed(by: disposeBag)
Reachability.rx.isConnected
.subscribe(onNext: {
print("Is connected")
})
.disposed(by: disposeBag)
Reachability.rx.isDisconnected
.subscribe(onNext: {
print("Is disconnected")
})
.disposed(by: disposeBag)
}
使用 RxReachability,您还可以在网络恢复时添加重试,并设置给定的超时时间。但这确实需要您存储 Reachability 的实例。
func request(somethingId: Int) -> Observable<Something> {
return network.request(.something(somethingId))
.retryOnConnect(timeout: 30)
.map { Something(JSON: $0) }
}
要使用 CocoaPods 将 RxReachability 集成到您的 Xcode 项目中,只需将以下行添加到您的 Podfile
pod 'RxReachability', '~> 1.2.1'
要使用 Carthage 将 RxReachability 集成到您的 Xcode 项目中,只需将以下行添加到您的 Cartfile
github "RxSwiftCommunity/RxReachability" ~> 1.2.1
要使用 SPM 将 RxReachability 集成到您的 Xcode 项目中,只需将以下行添加到您的 Package.swift
.package(url: "https://github.com/RxSwiftCommunity/RxReachability", .upToNextMajor(from: "1.2.1")),
要运行示例项目,请克隆 repo,并首先从 Example 目录运行 pod install
。
此库属于 RxSwiftCommunity。
RxReachability 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。