如何将 NWPathMonitor 与 Alamofire 一起使用?
How to use NWPathMonitor with Alamofire?
我目前有一个 NetworkManager
class,它利用 Alamofire 并处理网络请求。此外,我还有 MonitorManager
class 和 returns 互联网连接状态。所以我想做一个通用的实现,每个请求都应该建立互联网连接,否则会出现一个错误弹出窗口。我怎样才能得到这个?
这不是推荐的使用方式NWPathMonitor
。 Apple 建议您像往常一样发出网络请求,如果它们因特定的连接错误而失败,请使用路径监视器等待连接到 return,然后重新发出请求。不幸的是,Alamofire 没有开箱即用的功能,因此您需要自己将两者集成。幸运的是,Alamofire 的 RequestRetrier
提供了一个合适的钩子。你可以这样做:
struct PathAwaitingRetrier: RequestRetrier {
// Take a reference to your path monitor.
func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) {
// Check error to see if it's a connectivity error.
// If so, add an observer to the path monitor which will
// call completion(.retry) when connectivity is restored.
// If not, call completion(.doNotRetry).
}
}
我目前有一个 NetworkManager
class,它利用 Alamofire 并处理网络请求。此外,我还有 MonitorManager
class 和 returns 互联网连接状态。所以我想做一个通用的实现,每个请求都应该建立互联网连接,否则会出现一个错误弹出窗口。我怎样才能得到这个?
这不是推荐的使用方式NWPathMonitor
。 Apple 建议您像往常一样发出网络请求,如果它们因特定的连接错误而失败,请使用路径监视器等待连接到 return,然后重新发出请求。不幸的是,Alamofire 没有开箱即用的功能,因此您需要自己将两者集成。幸运的是,Alamofire 的 RequestRetrier
提供了一个合适的钩子。你可以这样做:
struct PathAwaitingRetrier: RequestRetrier {
// Take a reference to your path monitor.
func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) {
// Check error to see if it's a connectivity error.
// If so, add an observer to the path monitor which will
// call completion(.retry) when connectivity is restored.
// If not, call completion(.doNotRetry).
}
}