Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Human interface guide
- UICollectionView
- swiftUI
- 클린 코드
- 리펙터링
- swift documentation
- RxCocoa
- Xcode
- 리펙토링
- uitableview
- Refactoring
- clean architecture
- UITextView
- 애니메이션
- tableView
- Protocol
- uiscrollview
- map
- ios
- collectionview
- HIG
- MVVM
- combine
- 스위프트
- 리팩토링
- ribs
- Clean Code
- Observable
- rxswift
- SWIFT
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] NotificationCenter (background에서 foreground 진입 이벤트) 본문
iOS 기본 (swift)
[iOS - swift] NotificationCenter (background에서 foreground 진입 이벤트)
jake-kim 2021. 6. 2. 22:57NotificationCenter
- 특정 코드에 데이터를 보내고 싶은 경우나, 특정 이벤트를 받고 싶은 경우 사용
- post하는 부분과 addObserver부분이 존재
- post: 노티 전송
- addObserver: 노티 받는 입장
사용 방법
- 노티 구분은 Notification.Name 객체로 구분하므로, 사용할 노티 이름 설정
extension Notification.Name {
static let print = NSNotification.Name("print")
}
- post 부분
NotificationCenter.default.post(name: .print, object: nil)
- addObserver부분 (이벤트를 받을 부분)
NotificationCenter.default.addObserver(self, selector: #selector(printSome), name: .print, object: nil)
...
@objc func printSome() {
print("print!!")
}
- 계속 addObserver하고 있는 형태이므로 removeObserver필요
@objc func printSome() {
print("print!!")
NotificationCenter.default.removeObserver(self, name: .print, object: nil)
}
* 전체 코드
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(printSome), name: .print, object: nil)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
NotificationCenter.default.post(name: .print, object: nil)
}
}
@objc func printSome() {
print("print!!")
NotificationCenter.default.removeObserver(self, name: .print, object: nil)
}
}
extension Notification.Name {
static let print = NSNotification.Name("print")
}
background에서 foreground 진입 이벤트
- background -> foreground로 이동한 경우 Notification.Name은 UIApplication객체에서 제공하는것 사용
- UIApplication.willEnterForegroundNotification
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(printForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
}
@objc func printForeground() {
print("entered foreground")
NotificationCenter.default.removeObserver(self, name: UIApplication.willEnterForegroundNotification, object: nil)
}
}
- 시스템 설정 후 다시 앱으로 돌아온 경우, 이벤트를 처리하기 위해서 위와같이 사용
'iOS 기본 (swift)' 카테고리의 다른 글
[iOS - swift] 2. collectionView 구현, custom cell (0) | 2021.06.03 |
---|---|
[iOS - swift] 1. collectionView 개념 (0) | 2021.06.03 |
[iOS - swift] SPM(Swift Pacakage Manager) 사용 방법 (0) | 2021.05.22 |
[iOS - swift] xib 사용원리 (archive, unarchive), encode, decode, NSCoder (0) | 2021.05.19 |
[iOS - swift] ARC, strong, unowned, weak (실무 관점) (0) | 2021.05.03 |
Comments