[swift] Reachability를 사용해 인터넷 연결 상태가 변경되는 시점에 특정 동작 수행하기
iOS 앱 개발 시, 사용자의 인터넷 연결 상태를 감지하고 이에 따른 특정 동작을 수행해야 할 때가 있습니다. Reachability를 사용하면 인터넷 연결 상태가 변경될 때마다 적절한 동작을 수행할 수 있습니다.
Reachability 라이브러리 설치
먼저 Reachability를 사용하기 위해 Cocoapods를 이용해 라이브러리를 설치합니다. Podfile에 다음과 같이 Reachability를 추가합니다.
pod 'ReachabilitySwift'
터미널에서 pod install
명령어를 실행하여 라이브러리를 설치합니다.
Reachability 객체 생성
Reachability를 사용하기 위해서는 Reachability 객체를 생성해야 합니다. 일반적으로 ViewController 등에서 Reachability 객체를 생성하고 연결 상태 변경을 감지하는 로직을 구현합니다.
다음은 Reachability 객체를 생성하는 예시입니다.
import Reachability
class ViewController: UIViewController {
let reachability = try? Reachability()
override func viewDidLoad() {
super.viewDidLoad()
// Reachability 객체 생성 후 연결 상태 변경 감지
NotificationCenter.default.addObserver(self, selector: #selector(toggleReachability(notification:)), name: .reachabilityChanged, object: reachability)
do {
try reachability?.startNotifier()
} catch {
print("Unable to start reachability notifier")
}
}
@objc func toggleReachability(notification: NSNotification) {
guard let reachability = notification.object as? Reachability else {
return
}
if reachability.connection != .unavailable {
// 인터넷 연결 상태가 변경된 경우 동작 수행
performActionWhenReachable()
} else {
// 인터넷 연결이 끊긴 경우 동작 수행
performActionWhenUnreachable()
}
}
func performActionWhenReachable() {
// 인터넷 연결이 가능한 상태에 대한 처리 로직 구현
}
func performActionWhenUnreachable() {
// 인터넷 연결이 불가능한 상태에 대한 처리 로직 구현
}
}
위의 코드에서는 Reachability 객체를 생성하고, .reachabilityChanged
Observer를 추가하여 연결 상태의 변경을 감지합니다. 연결 상태 변경 시 toggleReachability
메서드가 호출되고, 해당 메서드에서 연결 상태에 따른 동작을 수행합니다.
주의사항
- Reachability는 Notification을 이용해 연결 상태 변경을 감지합니다. 따라서 Reachability 객체를 더 이상 사용하지 않을 때에는
reachability.stopNotifier()
를 호출하여 Notification을 해제해야 합니다. - 주의해야 할 점은 Notification을 추가한 ViewController와 Reachability의 생명주기가 동일해야 한다는 것입니다. 만약 ViewController가 메모리에서 해제된 상태에서 Reachability 객체의 Notification을 수신하려고 하면 앱이 크래시될 수 있습니다.