[iOS] Notification

RudinP·2024년 2월 28일
0

Study

목록 보기
182/227

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")
}
profile
곰을 좋아합니다. <a href = "https://github.com/RudinP">github</a>

0개의 댓글