بدون توضیح

Yuki Nagai 6d3da2e6ae Deployment Target to 8.0 10 سال پیش
Reachability 071d34a51a Carthage support 10 سال پیش
Reachability.xcodeproj 6d3da2e6ae Deployment Target to 8.0 10 سال پیش
ReachabilitySample 6d3da2e6ae Deployment Target to 8.0 10 سال پیش
.gitignore 79f8d2502f Add test harness app 11 سال پیش
LICENSE acc3ef30f8 Initial check in 11 سال پیش
README.md 36bff8c0a1 Add syntax highlighting to the readme. 10 سال پیش
ReachabilitySwift.podspec 96b95ecda3 Update podspec 10 سال پیش

README.md

Reachability.swift

Replacement for Apple's Reachability re-written in Swift with closures

Inspired by https://github.com/tonymillion/Reachability

NOTES:

  • If an application has the privacy option “Use cellular data” turned off, the Reachability class still reports isReachable() to be true. There is currently no (non-private) API to detect this. If you need this feature, please raise file a bug report with Apple to get this fixed. See devforums thread for details: https://devforums.apple.com/message/1059332#1059332

Installation

CocoaPods

CocoaPods is a dependency manager for Cocoa projects. To install Reachability.swift with CocoaPods:

  1. Make sure CocoaPods is installed.

  2. Update your Podfile to include the following:

    use_frameworks!
    pod 'ReachabilitySwift', git: 'https://github.com/ashleymills/Reachability.swift'
    
  3. Run pod install.

Manual

Just drop the Reachability.swift file into your project. That's it!

Example - closures

let reachability: Reachability
do {
    reachability = try Reachability.reachabilityForInternetConnection()
} catch {
    print("Unable to create Reachability")
    return
}


reachability.whenReachable = { reachability in
    // this is called on a background thread, but UI updates must
    // be on the main thread, like this:
    dispatch_async(dispatch_get_main_queue()) {
        if reachability.isReachableViaWiFi() {
            print("Reachable via WiFi")
        } else {
            print("Reachable via Cellular")
        }
    }
}
reachability.whenUnreachable = { reachability in
    // this is called on a background thread, but UI updates must
    // be on the main thread, like this:
    dispatch_async(dispatch_get_main_queue()) {
        print("Not reachable")
    }
}

do {
    try reachability.startNotifier()
} catch {
    print("Unable to start notifier")
}

and for stopping notifications

reachability.stopNotifier()

Example - notifications

This sample will use NSNotifications to notify when the interface has changed. They will be delivered on the MAIN THREAD, so you can do UI updates from within the function.

let reachability: Reachability
do {
    reachability = try Reachability.reachabilityForInternetConnection()
} catch {
    print("Unable to create Reachability")
    return
}

NSNotificationCenter.defaultCenter().addObserver(self, 
                                                 selector: "reachabilityChanged:", 
                                                 name: ReachabilityChangedNotification, 
                                                 object: reachability)

reachability.startNotifier()

and

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 {
        print("Not reachable")
    }
}

and for stopping notifications

reachability.stopNotifier()
NSNotificationCenter.defaultCenter().removeObserver(self, 
                                                    name: ReachabilityChangedNotification, 
                                                    object: reachability)

Want to help?

Got a bug fix, or a new feature? Create a pull request and go for it!

Let me know!

If you use Reachability.swift, please let me know about your app and I'll put a link here… and tell your friends!

Cheers, Ash