ios - NetworkReachabilityManager 或 Reachability 无法识别在没有互联网的情况下连接 wifi

标签 ios swift alamofire reachability

尝试检查互联网连接时遇到问题。 在像这样没有互联网的 wifi 上使用 alamofire NetworkReachabilityManager 时:

import Alamofire

class Connectivity {
class func isConnectedToInternet() ->Bool {
    return NetworkReachabilityManager()!.isReachable
 }
}

这是实现:

    if Connectivity.isConnectedToInternet() {
        print("Yes! internet is available.")
    } else {
        print("No! internet is not available.")
    }

我得到:“是的!互联网可用。”当没有事件的互联网连接时(使用 Safari 检查)。

也尝试了这个具有可达性的:

import Reachability

 class ReachabilityManager: NSObject {

var reachability: Reachability!

static let sharedInstance: NetworkManager = { return NetworkManager() }()


override init() {
    super.init()
    
    reachability = Reachability()!
    
    NotificationCenter.default.addObserver(
        self,
        selector: #selector(networkStatusChanged(_:)),
        name: .reachabilityChanged,
        object: reachability
    )
    
    do {
        try reachability.startNotifier()
    } catch {
        print("Unable to start notifier")
    }
}

@objc func networkStatusChanged(_ notification: Notification) {
    // Do something globally here!
}

static func stopNotifier() -> Void {
    do {
        try (NetworkManager.sharedInstance.reachability).startNotifier()
    } catch {
        print("Error stopping notifier")
    }
}

static func isReachable(completed: @escaping (NetworkManager) -> Void) {
    if (NetworkManager.sharedInstance.reachability).connection != .none {
        completed(NetworkManager.sharedInstance)
    }
}

static func isUnreachable(completed: @escaping (NetworkManager) -> Void) {
    if (NetworkManager.sharedInstance.reachability).connection == .none {
        completed(NetworkManager.sharedInstance)
    }
}

static func isReachableViaWWAN(completed: @escaping (NetworkManager) -> Void) {
    if (NetworkManager.sharedInstance.reachability).connection == .cellular {
        completed(NetworkManager.sharedInstance)
    }
}

static func isReachableViaWiFi(completed: @escaping (NetworkManager) -> Void) {
    if (NetworkManager.sharedInstance.reachability).connection == .wifi {
        completed(NetworkManager.sharedInstance)
    }
}
}

实现是:

NetworkManager.isReachable { networkManagerInstance in
    print("Network is available")
}

NetworkManager.isUnreachable { networkManagerInstance in
    print("Network is Unavailable")
}

我做错了什么?

最佳答案

你是如何检查连接的?你有没有试过像下面这样联系任何主机。

do {
        Network.reachability = try Reachability(hostname: "www.google.com")
        do {
            try Network.reachability?.start()
        } catch let error as Network.Error {
            print(error)
        } catch {
            print(error)
        }
    } catch {
        print(error)
    }

关于ios - NetworkReachabilityManager 或 Reachability 无法识别在没有互联网的情况下连接 wifi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51877779/

相关文章:

swift - 在 Swift/iOS 中的应用程序之间共享文件数据

swift - 绘制 View : the drawing is not in the same position as my finger or my cursor

javascript - 如何使用 swift3 从 alamofire 响应中获取字典数组的值

ios - 应用商店提交,元数据因聊天室选项而被拒绝

ios - 使用 Swift 从 Firebase 接收信息期间变量不是 "saving"

ios - 一系列问题 swift

swift - 从主视图 Controller 中提取@IBOutlets 属性值

ios - 异步下载后在可见的 UITableviewCell 中设置图像

ios - 为什么文本标签是空的,而调试器说它不是? swift 应用程序?

ios - WatchKit App 只返回一些 HealthKit 数据