尝试使用 Alamofire 检查 iOS 设备上的互联网连接
Posted
技术标签:
【中文标题】尝试使用 Alamofire 检查 iOS 设备上的互联网连接【英文标题】:Attempt to check internet connection on iOS device with Alamofire 【发布时间】:2018-04-09 12:08:02 【问题描述】:我使用以下代码检查互联网连接:
class Reachability
let networkReachabilityManager = Alamofire.NetworkReachabilityManager(host: "www.google.com")
func checkForReachability()
self.networkReachabilityManager?.listener = status in
print("Network Status: \(status)")
switch status
case .notReachable:
print("no internet connection detected")
//Show error here (no internet connection)
case .reachable(_), .unknown:
print("internet connection availible")
self.networkReachabilityManager?.startListening()
连接存在时,成功调用.reachable中的block。但是在没有连接的情况下没有调用,为什么?
我这样称呼它(保持对类的引用,所以它不会被释放)
class AppDelegate: UIResponder, UIApplicationDelegate
var window: UIWindow?
let reachabilityManager = Reachability()
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
window = UIWindow(frame: UIScreen.main.bounds)
reachabilityManager.checkForReachability()
return true
【问题讨论】:
会有其他状态案例也使用它们并在您的情况下调试它的去向。 【参考方案1】:创建用于检查连通性的公共类
import Foundation
import Alamofire
class Connectivity
class func isConnectedToInternet() -> Bool
return NetworkReachabilityManager()!.isReachable
在你需要的地方调用函数
if !Connectivity.isConnectedToInternet()
// show Alert
return
【讨论】:
有时设备连接到Wifi/Mobile data
,但互联网无法正常工作。那么如何检查呢??
@EvgeniyKleban - 不需要这个,alamofire 使用isReachable
的键自动接收值
@Anbu.karthik 然后请删除不必要的代码 :)
@dahiya_boy - 这是 alamofire 的方法之一,alomifre 会自动处理这种情况。
数据已连接,但互联网无法正常工作。如何检查?【参考方案2】:
创建一个名为 Connectivity
的快速类。您可以使用Alamofire
中的NetworkReachabilityManager
类,并根据需要配置isConnectedToInternet()
方法。我只检查设备是否连接到互联网。
import Foundation
import Alamofire
class Connectivity
class func isConnectedToInternet() ->Bool
return NetworkReachabilityManager()!.isReachable
用法-
if Connectivity.isConnectedToInternet()
print("Yes! internet is available.")
// do some tasks..
或者你可以简单地这样做 -
if let err = error as? URLError, err.code == URLError.Code.notConnectedToInternet
// No internet connection
else
// your other errors
【讨论】:
以上是关于尝试使用 Alamofire 检查 iOS 设备上的互联网连接的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 9 问题上使用 Alamofire 上传带有 URL 参数的图像
使用 JustHTTP 和 Alamofire 发送两次 HTTP 帖子