Notification의 종류
Notification
Local Notification
- 기기 내부에서 별도의 통신 없이 알림을 띄워주는 것
Remote Notification
- 서버에서 보내주는 메세지를 기반으로 알림을 띄워주는 것
Notification 구현 순서
1. Notification Center 객체 생성
let center = NotificationCenter.default
2. 필요한 부분에서 post 메소드로 메세지 전송 구현
center.post(name: NSNotification.Name, object: Any?, userInfo [AnyHashable: Any]?)
name
: 노티피케이션의 이름
- ex)
NSNotification.Name(rawValue: String)
object
: 노티피케이션을 보낸 객체. 보통 nil 전달
userInfo
: 메세지에 추가 정보를 담을 때 사용
let center = NotificationCenter.default
center.post(name: NSNotification.Name("toDoDidInsert"), object: nil, userInfo: ["todo": text])
3. 필요한 부분에서 observer 등록
- 한 번만 하면 되므로 보통 viewDidLoad에서 등록
NotificationCenter.default.addObserver(forName: NSNotification.Name, object: Any?, queue: OperationQueue?, using: (Notification) -> Void)
forName
: 위에서 post한 노티피케이션 이름. 여기서 설정한 노티피케이션이 들어오면 실행되는 것.
queue
: 보통 .main. 아래의 클로저가 실행되는 스레드를 설정
using
: 클로저. notification을 받게 되면 이 코드가 실행됨.
NotificationCenter.default.addObserver(forName: NSNotification.Name("toDoDidInsert"), object: nil, queue: .main) { noti in
if let todo = noti.userInfo?["todo"] as? String{
self.toDoList.append(todo)
self.toDoTableView.reloadData()
}
}
Notification Name 속성 만들기
- 이름을 String으로 넘겨주게 되면 오타 발생 가능성이 있으므로 속성으로 만들고 사용하는 것도 좋다.
extension Notification.Name{
static let toDoInsert = Notification.Name("toDoInsert")
}