swift 通知_如何在IOS中使用Swift处理Internet连接可达性

b3e1bb37f5b86515f78b3918c25bf21b.png

移动应用程序通常需要有效的网络连接才能正常运行。但是,移动网络丢失是正常的。在这些情况下,开发人员需要想出一些方法来使增强用户体验,或者说至少通知用户。

在本文中,我们将看到如何检测Swift中的Internet连接问题,以及我们可以处理它的一些方法。以下是我们将要构建的示例应用程序以及它如何处理不同的Internet连接方案:

d9bf1a2bca77ad657a0095a9a7649827.gif

前提

为了能够在本文中进行操作,您需要满足以下要求:

  • Xcode已经安装
  • 具备基本的swift语言
  • Cocoapods已经安装

初始化新建一个工程

Swift有自带的Reachability实现来检测网络连接问题,但这里将使用第三方库(https://github.com/tonymillion/Reachability)。这样做是因为它更容易,API比内置的更具表现力。

打开Xcode并设置一个新项目

5d96f3cd5e5852696793264c9c7a1d47.png

要检测连接何时脱机,我们将使用Reachability.swift (https://github.com/ashleymills/Reachability.swift) ****包。

打开终端并运行以下命令:

$ pod init

这将创建一个新的Podfile,我们可以在其中声明Cocoapods依赖项。打开Podfile并使用以下代码替换内容:

platform :ios, '9.0'target 'project_name' do use_frameworks! pod 'ReachabilitySwift' pod 'Alamofire'end

您需要将** project_name **替换为你自己创建项目名称。

保存文件并运行以下命令将Pod安装到项目中:

$ pod install

安装完成后,打开项目根目录中的* .xcworkspace文件。启动Xcode。

创建我们的网络可达性管理器

创建一个新的NetworkManager类。此类将存储网络状态,并且是Reachability包的简单代理。在文件中,粘贴以下代码:

import Foundationimport Reachabilityclass NetworkManager: NSObject { var reachability: Reachability! static let sharedInstance: NetworkManager = {  return NetworkManager()  }() override init() { super.init() // Initialise reachability reachability = Reachability()! // Register an observer for the network status NotificationCenter.default.addObserver( self, selector: #selector(networkStatusChanged(_:)), name: .reachabilityChanged, object: reachability ) do { // Start the network status notifier try reachability.startNotifier() } catch { print("Unable to start notifier") } } @objc func networkStatusChanged(_ notification: Notification) { // Do something globally here! } static func stopNotifier() -> Void { do { // Stop the network status notifier try (NetworkManager.sharedInstance.reachability).startNotifier() } catch { print("Error stopping notifier") } } // Network is reachable static func isReachable(completed: @escaping (NetworkManager) -> Void) { if (NetworkManager.sharedInstance.reachability).connection != .none { completed(NetworkManager.sharedInstance) } } // Network is unreachable static func isUnreachable(completed: @escaping (NetworkManager) -> Void) { if (NetworkManager.sharedInstance.reachability).connection == .none { completed(NetworkManager.sharedInstance) } } // Network is reachable via WWAN/Cellular static func isReachableViaWWAN(completed: @escaping (NetworkManager) -> Void) { if (NetworkManager.sharedInstance.reachability).connection == .cellular { completed(NetworkManager.sharedInstance) } } // Network is reachable via WiFi static func isReachableViaWiFi(completed: @escaping (NetworkManager) -> Void) { if (NetworkManager.sharedInstance.reachability).connection == .wifi { completed(NetworkManager.sharedInstance) } }]

在上面的类中,我们定义了几个帮助我们开始进行网络状态监控的辅助函数。我们有一个单独的sharedInstance,如果我们不想创建NetworkManager类的多个实例,我们可以调用它。

在init方法中,我们创建了一个Reachability实例,然后使用NotificationCenter类注册通知。现在,每次网络状态发生变化时,都会调用NotificationCenter指定的回调(即networkStatusChanged)。我们可以使用它来执行在网络无法访问时激活的全局内容。

我们已经定义了其他网络函数,这些函数通常会根据我们的Internet连接状态轻松运行代码,*isReachable*, *isUnreachable*, *isReachableViaWWAN* 和 *isReachableViaWiFi*。

简单使用:

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

注意这不是一个事件监听器,只会运行一次。要使用侦听器实时获取网络更改,您需要使用NetworkManager.sharedInstance.reachability.whenReachable **。

在应用程序启动时处理网络可用

有时,应用程序很大程度上依赖于Internet连接,您需要在启动时检测状态,让我们看看如何使用NetworkManager类来处理这个问题。

创建一个名为LaunchViewController的新控制器。我们将故事板上的第一个控制器视图视为启动控制器。我们将尝试检测用户的设备是否在线,如果没有,我们将创建一个离线页面来处理这个问题,以便用户根本不会进入应用程序。

在LaunchController中,使用以下代码替换内容:

import UIKitclass LaunchViewController: UIViewController { let network: NetworkManager = NetworkManager.sharedInstance override func viewDidLoad() { super.viewDidLoad() NetworkManager.isUnreachable { _ in self.showOfflinePage() } } private func showOfflinePage() -> Void { DispatchQueue.main.async { self.performSegue( withIdentifier: "NetworkUnavailable
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值