ios - 通过添加观察者检查整个应用程序的互联网连接

标签 ios swift reachability

我不想在每次打开应用程序时检查互联网连接,而是想在状态栏或导航栏中显示无连接横幅,就像 Facebook 应用程序一样。 这是我的代码:

import SystemConfiguration

 public class Reachability {
class func isConnectedToNetwork() -> Bool {
    var zeroAddress = sockaddr_in()
    zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
    zeroAddress.sin_family = sa_family_t(AF_INET)
    let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
        SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
    }
    var flags = SCNetworkReachabilityFlags()
    if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {
        return false
    }
    let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
    let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
    return (isReachable && !needsConnection)
}
}

最佳答案

使用 NSTimer 进行定期检查

override func viewDidLoad() {
    super.viewDidLoad()
    //Swift 2.2 selector syntax
    var timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: #selector(MyClass.update), userInfo: nil, repeats: true)

}

// must be internal or public. 
func update()
{
     if(!Reachability.isConnectedToNetwork()){
        print("Internet connection not available.");
        return
    }
}

你的Reachability

import Foundation
import SystemConfiguration

public class Reachability {

    class func isConnectedToNetwork() -> Bool {

        var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
        zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
        zeroAddress.sin_family = sa_family_t(AF_INET)

        let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
            SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, UnsafePointer($0))
        }

        var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0)
        if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false {
            return false
        }

        let isReachable = flags == .Reachable
        let needsConnection = flags == .ConnectionRequired

        return isReachable && !needsConnection

    }
}

关于ios - 通过添加观察者检查整个应用程序的互联网连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38739672/

相关文章:

swift - Swift 中基于 View 的 NSTableView 不显示内容

android - 在 Swift 和 Kotlin 中离线时发送 HTTP 请求

ios - 连接总是给我假的?

iOS 8.0 - "failed to scene-update in time"崩溃

ios - 扩展 CLPlacemark 导致 EXC BAD ACCESS

ios - 从一台 iOS 设备向另一台设备传输信息

ios - 可达性:带 Wifi 的飞行模式

ios - 核心数据对象变为空

ios - XCUITest:从具有多个单元原型(prototype)的多个单元标识符中选择 CollectionView 单元

ios - 使用 Coredata 学习 Swift : why don't I get any UITableViewCells?