Swift 4 中的可达性问题

Posted

技术标签:

【中文标题】Swift 4 中的可达性问题【英文标题】:Reachability problems in Swift 4 【发布时间】:2018-01-09 07:42:32 【问题描述】:

我一直在尝试检查互联网连接。如果设备连接到互联网,那么它会转到 MainStoryboard 上的初始 viewController,否则它会在同一个故事板上显示另一个 viewController。但是这段代码对我不起作用。我没有收到任何错误,它只是不起作用。

这里是截图: Screenshot

这是我在 AppDelegate.swift 中写的:

class AppDelegate: UIResponder, UIApplicationDelegate 

var window: UIWindow?
var reachability: Reachability?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 

    UIApplication.shared.statusBarStyle = .lightContent
    NotificationCenter.default.addObserver(self, selector: #selector(ReachabilityCheck(_:)), name: NSNotification.Name.reachabilityChanged, object: nil)
    return true

而功能是:

    @objc func ReachabilityCheck(_: Notification) 
    var remoteHostStatus = self.reachability!.currentReachabilityStatus()

    if remoteHostStatus == NotReachable
    
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let offlineViewController = mainStoryboard.instantiateViewController(withIdentifier: "notReachable") as! notReachableViewController
        window!.rootViewController = offlineViewController
        window!.makeKeyAndVisible()
    else
    
        let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let initialViewController = mainStoryboard.instantiateViewController(withIdentifier: "mainNav") as! UINavigationController
        window!.rootViewController = initialViewController
        window!.makeKeyAndVisible()
    

我应该怎么做才能让它工作?请帮忙!

【问题讨论】:

你在哪里设置reachability属性?请遵守命名约定。类/结构以大写字母开头,变量和函数/方法以小写字母开头。 我已经从苹果下载了这个属性:link 不,var reachability: Reachability? 已声明但未初始化。该物业是nil。要监控可达性,您必须初始化 Reachability 实例并将其分配给属性。目前代码什么也不做。 我在 AppDelegate.swift 中的 didFinishLaunchingWithOptions launchOptions 中初始化了 self.reachability = Reachability.forInternetConnection() self.reachability?.startNotifier(),但它仍然不起作用。 你是说你想在应用程序启动并且它有连接时转到初始视图控制器,如果它没有连接它会转到另一个控制器,还是你想持续监控状态并在设备失去连接时更改? 【参考方案1】:

斯威夫特 4

创建一个新的 Swift 类

import Foundation

import Alamofire

class Connectivity 

class func isConnectedToInternet() ->Bool 

return NetworkReachabilityManager()!.isReachable




//用法.....

    if Connectivity.isConnectedToInternet() == true 
            print("Yes! internet is available.")
            // do some tasks..
        
        else
        
           // self.view.makeToast("Yes! internet is available.")
            print("Yes! internet is available.")
        

【讨论】:

以上是关于Swift 4 中的可达性问题的主要内容,如果未能解决你的问题,请参考以下文章

NSMetadataQuery isUpdating 在可达性更改为无 Swift 4 后中断

Xcode 8 e Swift 3 中的可达性错误

swift 3(xCode8-beta6)上的可达性问题

在 Swift 中使用可达性类

使用 SWIFT 检查 IP 地址可达性

Swift - 可达性崩溃