본문 바로가기
모바일앱/iOS

Notification Center

by GeekCode 2022. 1. 8.
반응형

Notification Center



1. <무언가 액션이 있었을때> 이 액션이 진행되었으니 담당자들은 처리바람.
2. 담당자 수신 완료, 처리하겠음


1. Post -> 이 액션이 진행되었으니 담당자들은 처리바람

NotificationCenter.default.post(name: .doItSomeThing, object: nil)

포스트 -> name에 해당하는 자들에게 각자 일을 수행하라고 시키는 것

doItSomeThing은 name에 해당(동작하라는 게 아님)
name: 일처리하는 스텝의 이름
스탭마다 일거리는 다르다.

- 일거리와 이름 세팅하기
@objc func printSomeThing(_ notification: Notification){
print(“do it something”)
}
하는 일은 프린트 해주는 것뿐이고 포인트는 파라미터 타입이 Notification

2. Observer -> 담당자 수신완료, 처리하겠음

Observer : 관찰자, 여기선 일하는 스텝(담당자)

//담당자 인적사항 및 업무추가
NotificationCenter.default.addObserver(self, selector: #selector(printSomeThing(_:)), name: .doItSomeThing, object: nil)

addObserver : 관찰자를 대기시키겠다는 것
selector : 스텝 업무
name: 스텝 이름

여기서 가장 중요한건 이름
1. Post 메소드가 name에 “누구씨 일해!!” 라고 한다면,
3. 그 이름에 해당 되는 스텝들이 각자 등록된 업무 (= selector) 수행하게 된다. -> 이 코드에선 .doItSomeTing을 부르면 아까 만든 함수(print 한줄짜리)를 실행하게 된다.

! 스텝 이름은 중복 가능 addObserver를 작성해도 이미 사용한 이름을 쓸수 있지만, 최종 이 아닌 해당이름이 모두 실행됨



+ name 등록방식 (2가지)

1. addObserver 할때 한번에
// Post
NotificationCenter.default.post(name: Notification.Name("doItSomeThing"), object: nil)
// Add Observer
NotificationCenter.default.addObserver(self, selector: #selector(printSomeThing(_:)), name: Notification.Name("doItSomeThing"), object: nil)
-> 이렇게 doItSomeThing이라는 Notification.Name 데이터 타입을 만들 수도 있지만 재사용도 힘들고 코드도 지저분


2. Extension으로 프로퍼티 추가

반응형