IOS, если у устройства нет подключения к Интернету, как его обнаружить и отобразить соответствующий текст

#ios #swift #connectivity

#iOS #swift #подключение

Вопрос:

Я пытаюсь создать простое приложение, которое фактически обертывает веб-страницу, но я бы не хотел открывать webview и показывать сообщение, когда устройство не подключено. Я нашел URLSessionConfiguration, но я понятия не имею, как его реализовать, помощь с благодарностью

Код пока

 class ViewController: UIViewController {

    @IBOutlet weak var myWebView: WKWebView!
    override func viewDidLoad() {


        super.viewDidLoad()
        // Do any additional setup after loading the view.
        let url = URL(string: "https://neti.ee")
        let config = URLSessionConfiguration.default
        config.waitsForConnectivity = true
        config.timeoutIntervalForResource = 300
        let session = URLSession(configuration: config)

        session.dataTask(with: url!) { data, response, error in
        }
        myWebView.load(URLRequest(url: url!));
        let label = UILabel(frame: CGRect(x: 100, y: 200, width: 220, height: 50))
        label.text = "Please connect to the internet";
        self.view.addSubview(label)
    }

}
  

Ответ №1:

Попробуйте этот метод и import SystemConfiguration

 static func isInternetAvailable() -> Bool
{
    var zeroAddress = sockaddr_in()
    zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
    zeroAddress.sin_family = sa_family_t(AF_INET)
    
    let defaultRouteReachability = withUnsafePointer(to: amp;zeroAddress) {
        $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
            SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
        }
    }
    
    var flags = SCNetworkReachabilityFlags()
    if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, amp;flags) {
        return false
    }
    let isReachable = flags.contains(.reachable)
    let needsConnection = flags.contains(.connectionRequired)
    return (isReachable amp;amp; !needsConnection)
}
  

Ответ №2:

Вы можете просто сделать это с помощью этого файла, импортированного в ваш проект: Достижимость

И затем в вашем ViewController вы можете проверить соединение следующим образом:

 class ViewController: UIViewController {

    let reachability = try! Reachability()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        reachability.whenReachable = { _  in
            //connected
        }
        reachability.whenUnreachable = { _ in
            //not connected
        }
        
        NotificationCenter.default.addObserver(self, selector: #selector(internetChanged), name: Notification.Name.reachabilityChanged , object: reachability)
        do{
            try reachability.startNotifier()
        } catch {
            print("Could not strat notifier")
        }
    }
    
    @objc
    func internetChanged(note: Notification) {
        //do something
    }
}