꾸준히 안타치기

Notification / 이벤트 전달! /노티피케이션 센터와 노티피케이션 본문

iOS/Basic Study

Notification / 이벤트 전달! /노티피케이션 센터와 노티피케이션

글자줍기 2021. 12. 28. 20:22
반응형

https://developer.apple.com/documentation/foundation/notificationcenter/

 

옵저버 패턴을 사용하는 노티피케이션 센터와 노티피케이션

ob·serv·er| əbzə́ːrr | 명사1.관찰자, 관측자; 감시자; 목격자(witness); 군사 항공 정찰원, 기상 정찰원  an astronomical observer천체 관측자.

노티피케이션 센터와 노티피케이션

Notification

등록된 노티피케이션에 노티피케이션 센터를 통해 정보를 전달하기 위한 구조체입니다.

주요 프로퍼티

  • name : 알림을 식별하는 태그
     var name: Notification.Name
  • object : 발송자가 옵저버에게 보내려고 하는 객체. 주로 발송자 객체를 전달하는 데 쓰임
     var object: Any?
  • userInfo : 노티피케이션과 관련된 값 또는 객체의 저장소
     var userInfo: [AnyHashable : Any]?​
    예) 특정 행동으로 인해 작업이 시작되거나 완료되는 시점에 다른 인스턴스로 노티피케이션이 발생 시 필요한 데이터를 같이 넘겨 줄 수 있습니다. 간단한 예로 네트워킹을 이용하는 애플리케이션이라면 네트워킹이 시작 및 완료되는 시점, 음악 및 동영상 재생 등에도 재생이 끝나는 시점에 관련 정보를 넘겨 줄 수 있습니다.

NotificationCenter

등록된 옵저버에게 동시에 노티피케이션을 전달하는 클래스입니다. NotificationCenter 클래스는 노티피케이션을 발송하면 노티피케이션 센터에서 메세지를 전달한 옵저버의 처리할 때까지 대기합니다. 즉, 흐름이 동기적(synchronous)으로 흘러갑니다. 노티피케이션을 비동기적으로 사용하려면 NotificationQueue를 사용하면 됩니다.

기본 노티피케이션 센터 얻기

  • default : 애플리케이션의 기본 노티피케이션 센터입니다.
     class var `default`: NotificationCenter { get }​

예제

 

일반 노티피케이션

  • 옵저버 등록
     NotificationCenter.default.addObserver(self, selector: #selector(didRecieveTestNotification(_:)), name: NSNotification.Name("TestNotification"), object: nil)
    
     @objc func didRecieveTestNotification(_ notification: Notification) {
             print("Test Notification")
     }
  • 발송자
     NotificationCenter.default.post(name: NSNotification.Name("TestNotification"), object: nil, userInfo: nil)​

User Info 정보를 담은 노티피케이션

  • 옵저버 등록
     NotificationCenter.default.addObserver(self, selector: #selector(didReceiveTestNotification(_:)), name: NSNotification.Name("TestNotification"), object: nil)
    
    @objc func didReceiveTestNotification(_ notification: Notification) {
     		guard let testString: String = notification.userInfo?["TestString"] as? String else { return }
             print("testString :", testString)
     }​
  • 발송자
     let userInfo: [AnyHashable: Any] = ["TestString":"Hi"]
    
     NotificationCenter.default.post(name: NSNotification.Name("TestNotification"), object: nil, userInfo: userInfo)​
 

https://www.boostcourse.org/mo326/lecture/16919?isDesc=false 

 

iOS 앱 프로그래밍

부스트코스 무료 강의

www.boostcourse.org

 

 

 

반응형

'iOS > Basic Study' 카테고리의 다른 글

Property List / CoreData - 데이터 저장방법  (0) 2022.02.09
xcode 단축키  (0) 2022.01.30
URL session 예제 / DispatchQueue  (0) 2021.12.28
Grand Central Dispatch  (0) 2021.12.27
URLSession과 URLSessionDataTask  (0) 2021.12.27
Comments