[Swift] 앱 안의 방송국 - Notification
Notification이란?
An object containing information broadcast to registered observers that bridges to Notification; use NSNotification when you need reference semantics or other Foundation-specific behavior.
- Notification을 통해 등록된 observer들에게 전달될 정보를 포함하는 존재
- 어떤 이벤트를 알리기 위한 역할
- 이벤트에 관련된 메세지를 송출하면 앱 내에서 이 메세지를 받을 수 있다.
장단점
- 장점
- 메소드 간의 의존성을 줄인다.
- 하나의 인스턴스가 동시에 여러 인스턴스에게 이벤트를 전달할 수 있다.
- 단점
- 코드가 분산이 돼서 추적하기 어려워진다.
- 따라서 디버깅하기 어려워질 수 있다.
사용방법
1. 방송국과 방송 이름 만들기
//방송국
let notificationCenter: NotificationCenter = .default
//방송이름
let didGameFinish: Notification.Name = Notification.Name("끝")
방송국을 만들 때 .default는 앱에서 전역적으로 사용될 수 있다는 의미
2. 방송을 받아서 전달하는 창구 역할의 메소드 만들기
@objc
func didRecieveGameFinish() {
// 임무완료 후 이벤트를 알림 받음
finishedGameCount = finishedGameCount + 1
}
3. 방송이 뿌려지면 받을 것이라는 설정을 방송을 받는 메소드의 이니셜라이저를 통해서 한다. 마치 구독신청..
→ name이라는 방송이 송출이 되면 #selector에 쓰여져 있는 메소드를 통해서 나에게 알려줘!
notificationCenter.addObserver(self, selector: #selector(didRecieveGameFinish),
name: didGameFinish, object: nil)
- addObserver: 방송을 구독하겠다.
- self: 내가 구독자(옵저버)가 되겠다.
- selector: #selector(didRecieveDelivered): didRecieveDelivered라는 창구를 통해서 방송을 받겠다.
- name: didGameFinish라는 방송을 받겠다.
- object: 어떤 곳에서 발송요청 했을 때만 방송 듣겠다를 설정. 발송자를 명시한다. 만약 nil이라면 모든 발송자의 방송을 받겠다는 의미
4. 방송을 보낼 함수 내에서 필요 기능 실행을 끝낸 뒤 방송 송출을 요청한다.
notificationCenter.post(name: didGameFinish, object: nil)
- didGameFinish라는 방송을 해줘!
- nil은 발송자의 정보를 숨기겠다는 의미. self로 한다면 내가 보낸다고 명시한다.
99. deinit을 통한 구독취소
notificationCenter.removeObserver(self)
Author And Source
이 문제에 관하여([Swift] 앱 안의 방송국 - Notification), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@horeng2/Swift-앱-안의-방송국-Notification저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)