3分钟上手网络检测:Reachability.swift可复制代码最佳实践

3分钟上手网络检测:Reachability.swift可复制代码最佳实践

【免费下载链接】Reachability.swift Replacement for Apple's Reachability re-written in Swift with closures 【免费下载链接】Reachability.swift 项目地址: https://gitcode.com/gh_mirrors/re/Reachability.swift

你是否还在为iOS网络状态检测写冗长代码?是否遇到过WiFi/蜂窝网络切换时App崩溃?本文通过5个可直接复制的代码片段,带你掌握Reachability.swift的核心用法,解决90%的网络状态监听场景。读完本文你将学会:快速初始化检测实例、实时监听网络变化、区分WiFi/蜂窝网络、处理网络异常场景,以及在UI中动态展示连接状态。

项目简介与核心文件

Reachability.swift是Apple官方Reachability类的Swift重写版本,通过闭包回调简化网络状态检测。项目核心代码位于Sources/Reachability.swift,定义了网络连接类型枚举、状态监听协议和通知机制。示例工程包含iOS、macOS和Apple TV平台的实现,可参考ReachabilitySample/目录下的ViewController实现。

1. 基础初始化:3行代码检测网络

创建Reachability实例是所有操作的基础,推荐使用默认初始化方法检测设备整体网络状态:

import Reachability

do {
    let reachability = try Reachability()
    // 开始网络监听
} catch {
    print("初始化失败: \(error)")
}

若需检测特定域名的可达性(如API服务器),可使用主机名初始化:

let reachability = try Reachability(hostname: "api.example.com")

2. 实时监听:闭包回调处理网络变化

通过闭包注册网络状态变化事件,无需手动处理通知中心:

reachability.whenReachable = { reachability in
    if reachability.connection == .wifi {
        print("WiFi连接已恢复")
    } else if reachability.connection == .cellular {
        print("蜂窝网络已连接")
    }
}

reachability.whenUnreachable = { _ in
    print("网络连接已断开")
}

// 启动监听器
try reachability.startNotifier()

3. 网络类型区分:业务逻辑适配

根据网络类型执行不同策略,如蜂窝网络下降低图片质量:

func setupNetworkDependentFeatures() {
    switch reachability.connection {
    case .wifi:
        loadHighQualityImages()
        startBackgroundSync()
    case .cellular:
        loadCompressedImages()
        disableAutoSync()
    case .unavailable:
        showOfflineMode()
    }
}

4. 生命周期管理:避免内存泄漏

在UIViewController中正确管理Reachability生命周期:

class NetworkAwareViewController: UIViewController {
    var reachability: Reachability!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setupReachability()
    }
    
    private func setupReachability() {
        do {
            reachability = try Reachability()
            try reachability.startNotifier()
        } catch {
            print("Reachability配置失败: \(error)")
        }
    }
    
    deinit {
        reachability.stopNotifier()
    }
}

5. 通知机制:跨组件状态同步

使用系统通知中心实现全局网络状态同步:

// 注册通知
NotificationCenter.default.addObserver(self, 
    selector: #selector(networkStatusChanged(_:)), 
    name: .reachabilityChanged, 
    object: nil)

// 处理通知
@objc func networkStatusChanged(_ notification: Notification) {
    guard let reachability = notification.object as? Reachability else { return }
    print("网络状态更新: \(reachability.connection)")
}

常见问题与解决方案

问题场景解决代码
监听器启动失败try? reachability.startNotifier() 改为 try reachability.startNotifier() 并处理错误
频繁状态切换在回调中添加防抖处理 DispatchQueue.main.asyncAfter(deadline: .now() + 1)
模拟器测试模拟器始终返回WiFi连接,需真机测试蜂窝网络逻辑

示例工程结构参考

项目提供多平台示例实现,文件结构如下:

建议通过研究这些示例了解不同平台的集成细节,特别注意UI更新需在主线程执行。

【免费下载链接】Reachability.swift Replacement for Apple's Reachability re-written in Swift with closures 【免费下载链接】Reachability.swift 项目地址: https://gitcode.com/gh_mirrors/re/Reachability.swift

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值