В этой статье мы рассмотрим, как проверить доступность Интернета в Swift с помощью платформы Network, представленной в iOS 12 и macOS 10.14.

Платформа Network предоставляет набор API-интерфейсов, которые позволяют разработчикам отслеживать сетевое подключение и принимать обоснованные решения на основе состояния сети.

Шаг 1. Импортируйте Network Framework.

Чтобы начать использовать сетевой фреймворк в своем проекте, его необходимо сначала импортировать. Добавьте следующую строку вверху файла Swift:

import Network

Шаг 2. Создайте сетевой монитор.

Чтобы проверить доступность Интернета, нам нужно создать экземпляр сетевого монитора. Этот монитор будет уведомлять нас всякий раз, когда изменяется статус сетевого подключения. Добавьте следующий код для создания сетевого монитора:

let monitor = NWPathMonitor()

Шаг 3. Определите обработчик сетевых изменений.

Далее нам нужно определить обработчик, который будет вызываться при каждом изменении сетевого подключения. Этот обработчик позволит нам предпринять соответствующие действия в зависимости от текущего состояния сети. Добавьте следующий код, чтобы настроить обработчик сетевых изменений:

monitor.pathUpdateHandler = { path in
    if path.status == .satisfied {
        print("Internet connection is available.")
        // Perform actions when internet is available
    } else {
        print("Internet connection is not available.")
        // Perform actions when internet is not available
    }
}

Шаг 4. Запустите сетевой монитор.

После настройки обработчика мы можем запустить сетевой монитор, чтобы начать наблюдать за состоянием сети.

Создание отдельной очереди отправки для мониторинга сети имеет решающее значение для предотвращения блокировки основной очереди и поддержания отзывчивого пользовательского интерфейса. Перенося задачи мониторинга сети в выделенную очередь, разработчики могут обеспечить беспрепятственное взаимодействие с пользователем, постоянно отслеживая состояние сети в фоновом режиме.

Добавьте следующий код, чтобы запустить сетевой монитор:

let queue = DispatchQueue(label: "NetworkMonitor")
monitor.start(queue: queue)

Платформа Network предоставляет класс NWPath, который представляет текущее состояние сетевого подключения и предоставляет ценную информацию о его доступности и характеристиках.

Свойство status

Свойство status элемента NWPath имеет тип NWPath.Status, который представляет собой перечисление со следующими возможными значениями:

  • .satisfied: указывает, что сетевое подключение доступно и соответствует требованиям приложения.
  • .unsatisfied: означает, что сетевое соединение недоступно или не соответствует требованиям приложения.
  • .requiresConnection: указывает, что сетевое подключение необходимо, но в настоящее время недоступно. Этот статус обычно отображается, когда устройство находится в режиме полета.

Получив доступ к свойству status, вы можете легко определить текущий статус сети и соответствующим образом настроить поведение приложения.

Свойство isConstrained

Свойство isConstrained элемента NWPath помогает определить, ограничено ли сетевое соединение каким-либо образом. Ограниченное сетевое подключение обычно подразумевает ограниченную полосу пропускания, большую задержку или другие ограничения, которые могут повлиять на производительность операций, зависящих от сети.

Вы можете использовать свойство isConstrained для динамической настройки поведения приложения для оптимизации взаимодействия с пользователем на основе сетевых ограничений. Например, вы можете снизить качество загружаемых медиафайлов или ограничить объем передаваемых данных в сценариях с ограниченной сетью.

Свойство isExpensive

Свойство isExpensive для NWPath позволяет определить, считается ли сетевое подключение дорогостоящим с точки зрения стоимости или использования данных. Это особенно важно для приложений, потребляющих значительный объем данных, или для пользователей с ограниченными тарифными планами.

Проверяя свойство isExpensive, вы можете предоставлять соответствующие предупреждения или разрешать пользователям настраивать поведение приложения, чтобы оптимизировать потребление данных и избежать непредвиденных расходов.

Метод usesInterfaceType(_:)

Метод usesInterfaceType класса NWPath принимает параметр NWInterface.InterfaceType и возвращает логическое значение. Это позволяет нам проверить, использует ли сетевое соединение определенный тип интерфейса.

Вызывая метод usesInterfaceType(_:), вы можете определить, подключено ли устройство через Wi-Fi, сотовую связь, проводной Ethernet или другие сетевые интерфейсы.

В приведенном примере кода показано, как проверить, подключено ли устройство через Wi-Fi или сотовую сеть:

let usesWiFi = path.usesInterfaceType(.wifi)
let usesCellular = path.usesInterfaceType(.cellular)

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