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
CocoaPods is a dependency manager for Cocoa projects. To install Reachability.swift with CocoaPods:
-
Make sure CocoaPods is installed.
-
Update your Podfile to include the following:
use_frameworks! pod 'ReachabilitySwift', git: 'https://github.com/ashleymills/Reachability.swift'
-
Run
pod install
.
Just drop the Reachability.swift file into your project. That's it!
let reachability = Reachability.reachabilityForInternetConnection()
reachability.whenReachable = { reachability in
// keep in mind this is called on a background thread
// and if you are updating the UI it needs to happen
// on the main thread, like this:
dispatch_async(dispatch_get_main_queue()) {
if reachability.isReachableViaWiFi() {
println("Reachable via WiFi")
} else {
println("Reachable via Cellular")
}
}
}
reachability.whenUnreachable = { reachability in
// keep in mind this is called on a background thread
// and if you are updating the UI it needs to happen
// on the main thread, like this:
dispatch_async(dispatch_get_main_queue()) {
println("Not reachable")
}
}
reachability.startNotifier()
and for stopping notifications
reachability.stopNotifier()
This sample will use NSNotification
s 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.reachabilityForInternetConnection()
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() {
println("Reachable via WiFi")
} else {
println("Reachable via Cellular")
}
} else {
println("Not reachable")
}
}
and for stopping notifications
reachability.stopNotifier()
NSNotificationCenter.defaultCenter().removeObserver(self,
name: ReachabilityChangedNotification,
object: reachability)
Got a bug fix, or a new feature? Create a pull request and go for it!
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