SCNetworkReachability 2.0.6

SCNetworkReachability 2.0.6

测试测试
Lang语言 Obj-CObjective C
许可证 MIT
发布上次发布2017年11月

Alexey Belkevich 维护。



iOS 和 OS X 的网络可达性

关于

SCNetworkReachability 类是对 SCNetworkReachability API 的封装,该 API 位于 SystemConfiguration.framework 中的 C 结构和 C 函数。

与 Apple 的可达性差异
  • 没有 NSNotificationCenter。使用回调块确定可达性状态或观察变化
  • 没有同步可达性检查。您的应用程序不会因为连接有问题而崩溃
  • 没有 "code smell"。所有代码都是面向对象风格的。
  • 支持 OS X

安装

pod 'SCNetworkReachability' 添加到 Podfile

使用

检查可达性状态

检查某些主机的当前可达性状态。此回调将在确定可达性状态后立即执行一次。 注意。回调块将在主队列中运行!

SCNetworkReachability *reachability = [[SCNetworkReachability alloc] initWithHost:@"https://github.com"];
[reachability reachabilityStatus:^(SCNetworkStatus status)
{
    switch (status)
    {
        case SCNetworkStatusReachableViaWiFi:
            NSLog(@"Reachable via WiFi");
            break;

        case SCNetworkStatusReachableViaCellular:
            NSLog(@"Reachable via Cellular");
            break;

        case SCNetworkStatusNotReachable:
            NSLog(@"Not Reachable");
            break;
    }
}];

如果您不想存储 SCNetworkReachability 实例,您可以使用类方法完成相同操作。

[SCNetworkReachability host:@"github.com" reachabilityStatus:^(SCNetworkStatus status)
{
    switch (status)
    {
        case SCNetworkStatusReachableViaWiFi:
            NSLog(@"Reachable via WiFi");
            break;

        case SCNetworkStatusReachableViaCellular:
            NSLog(@"Reachable via Cellular");
            break;

        case SCNetworkStatusNotReachable:
            NSLog(@"Not Reachable");
            break;
    }
}];

注意。iOS 只有一个不同之处,您只有一个状态 SCNetworkStatusReachable,而不是 SCNetworkStatusReachableViaWiFiSCNetworkStatusReachableViaCellular

观察可达性变化

观察某些主机的可达性变化。此回调将在每次可达性状态改变时执行。

SCNetworkReachability *reachability = [[SCNetworkReachability alloc] initWithHost:@"example.com"];
[reachability observeReachability:^(SCNetworkStatus status)
{
    switch (status)
    {
        case SCNetworkStatusReachableViaWiFi:
            NSLog(@"Reachable via WiFi");
            break;

        case SCNetworkStatusReachableViaCellular:
            NSLog(@"Reachable via Cellular");
            break;

        case SCNetworkStatusNotReachable:
            NSLog(@"Not Reachable");
            break;
    }
}];

多线程

有时您需要在主队列之外检查可达性。使用 Multithreading 子规格很容易做到。

安装

pod 'SCNetworkReachability/Multithreading' 添加到 Podfile。

使用方法

多线程 子规范允许为回调设置自定义的 dispatch 队列。因此,您可以从中选择任一方法。

- (void)observeReachabilityOnDispatchQueue:(dispatch_queue_t)queue
                                  callback:(void (^)(SCNetworkStatus))block;
- (void)reachabilityStatusOnDispatchQueue:(dispatch_queue_t)queue
                                 callback:(void (^)(SCNetworkStatus))block;
+ (void)hostReachabilityStatus:(NSString *)host onDispatchQueue:(dispatch_queue_t)queue
                      callback:(void (^)(SCNetworkStatus))block;

共享可达性

另一个有用的子规范是 Shared。它为 SCNetworkReachability 类创建了共享实例。

安装

pod 'SCNetworkReachability/Shared' 添加到 Podfile。

使用方法
SCNetworkReachability *reachability = SCNetworkReachability.shared;

与 Apple 的可达性兼容性

为与 Apple 的可达性兼容,我保留了两个初始化方法。我从未使用过它们,但对某些人来说可能有用。

安装

pod 'SCNetworkReachability/Compatibility' 添加到 Podfile。

使用方法

检测设备上的 WiFi 通信能力。仅在 iOS 上可用。

SCNetworkReachability *reachability = [[SCNetworkReachability alloc] initForLocalWiFi];

使用 IP 地址结构的可达性

struct sockaddr_in address;
// Does anybody knows how to define this structure? =)
address = ...
SCNetworkReachability *reachability = [[SCNetworkReachability alloc] initWithHostAddress:&address];

版本历史

发行版

更新

在推特上关注更新 @okolodev