Как я могу проверить мобильные данные или Wi-Fi включен или выключен. ios swift

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

import Foundation import SystemConfiguration public class Reachability { class func isConnectedToNetwork() -> Bool { var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)) zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) zeroAddress.sin_family = sa_family_t(AF_INET) let defaultRouteReachability = withUnsafePointer(&zeroAddress) { SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, UnsafePointer($0)) } var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0) if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false { return false } let isReachable = flags == .Reachable let needsConnection = flags == .ConnectionRequired return isReachable && !needsConnection } } 

но по этому коду проверяется только то, что Wi-Fi подключен или нет. но если я попробую с 3g мобильных данных, он всегда показывает мне, что ваши мобильные данные не связаны. так как я могу это решить?

Попробуйте, например, код ниже:

Создайте объект класса достижимости, например,

  var internetReachability = Reachability() 

Теперь напишите ниже код в viewDidLoad (),

  NSNotificationCenter.defaultCenter().addObserver(self, selector: "reachabilityChanged:", name: kReachabilityChangedNotification, object: nil) self.internetReachability = Reachability.reachabilityForInternetConnection() self.internetReachability.startNotifier() self.updateInterfaceWithReachability(self.internetReachability) 

Теперь создайте функцию для проверки работоспособности Wi-Fi, а также пакета данных,

 func updateInterfaceWithReachability(reachability: Reachability) { let netStatus : NetworkStatus = reachability.currentReachabilityStatus() switch (netStatus.rawValue) { case NotReachable.rawValue: print("offline") break case ReachableViaWWAN.rawValue: print("online") break case ReachableViaWiFi.rawValue: print("online") break default : print("offline") break } } // Rechability update status func reachabilityChanged(sender : NSNotification!) { let curReach : Reachability = sender.object as! Reachability self.updateInterfaceWithReachability(curReach) } 

Надеюсь, что это поможет вам.

Если у вас есть суперкласс в вашем приложении, используйте ниже код

 override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) NSNotificationCenter.defaultCenter().addObserver(self, selector: "ShowNetConnectivity", name: SHOW_NO_INTERNET_CONNECTION, object: nil) NSNotificationCenter.defaultCenter().addObserver(self, selector: "DisssmissConnectivity", name: DISMISS_INTERNET_CONNECTION, object: nil) let reachability = SCNetworkReachabilityCreateWithName(nil, host)! SCNetworkReachabilitySetCallback(reachability, { (_, flags, _) in print(flags.rawValue) if (flags.rawValue == NotReachable.rawValue && flags.rawValue != ReachableViaWiFi.rawValue && flags.rawValue != ReachableViaWWAN.rawValue) { if(isConnectionAvailable == true) { let nc = NSNotificationCenter.defaultCenter() nc.postNotificationName(SHOW_NO_INTERNET_CONNECTION, object: nil) } }else { if(isConnectionAvailable == false) { let nc = NSNotificationCenter.defaultCenter() nc.postNotificationName(DISMISS_INTERNET_CONNECTION, object: nil) } } }, &context) SCNetworkReachabilityScheduleWithRunLoop(reachability, CFRunLoopGetMain(), kCFRunLoopCommonModes) } override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(animated) NSNotificationCenter.defaultCenter().removeObserver(self, name: SHOW_NO_INTERNET_CONNECTION, object: nil) NSNotificationCenter.defaultCenter().removeObserver(self, name: DISMISS_INTERNET_CONNECTION, object: nil) } 

Вот как я это делаю, и это работает для меня. В моем представленииDidLoad:

 do { reachability = try Reachability.reachabilityForInternetConnection() } catch { print("Unable to create Reachability") return } NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(MainViewController.reachabilityChanged(_:)), name: ReachabilityChangedNotification, object: reachability) do { try reachability.startNotifier() } catch { print("This is not working.") return } 

И достижимостьChanged

 func reachabilityChanged(note: NSNotification) { let reachability = note.object as! Reachability if reachability.isReachable() { if reachability.isReachableViaWiFi() { print("Reachable via WiFi") } else { print("Reachable via Cellular") } } else { showNoConnectionAlert() print("Not reachable") } } 

Использование этой возможности

Interesting Posts

Воспроизвести видео с url в объективе c с буферизацией

Странная общая функция появляется в представлении контроллера после преобразования в swift 3

FBSDKLoginManager logInWithPublishPermissions всегда возвращает isCancelled = ДА

Можем ли мы определить, оплачивается ли SIM-карта или оплачивается с помощью iOS?

Не удается распространять мое приложение: «Ваше приложение содержит непубличное использование API».

Popovers нельзя представить из представления, которое не имеет оконной ошибки

Как правильно ориентировать изображение, созданное с помощью AVCaptureVideoDataOutputSampleBufferDelegate

Как автоматически прокручивать в виде таблицы? (Swift)

Перенос iPhone CoreData не удается: «Не удается найти модель для хранилища источников»

Ошибка при NSRangeException не может удалить наблюдателя для "заголовка"

Недоступные методы ARC в Swift

анимация преобразования представления iOS

Что-то не так с этим макросом run_on_main ()?

Как десериализовать json-объект и назначить NSDictionary в iOS

Почему сканирование штрих-кодов с использованием нового iOS 7 API очень медленное?

Давайте будем гением компьютера.