훌이
후리스콜링개발
훌이

블로그 메뉴

  • 왈 (iOS APP)
  • Github
전체 방문자
오늘
어제
  • 전체 (171)
    • ⭐️ 개발 (140)
      • JAVA (4)
      • Web (5)
      • iOS & Swift (94)
      • iOS Concurrency (4)
      • Rx (18)
      • Git (6)
      • WWDC (1)
      • Code Refactor (3)
      • Server (1)
    • ⭐️ Computer Science (22)
      • 운영체제 (10)
      • 네트워크 (5)
      • PS (7)
    • 경제시사상식 (8)
    • 기타 등등 (0)

인기 글

최근 글

05-28 03:32

티스토리

hELLO · Designed By 정상우.
훌이

후리스콜링개발

[iOS] NotificationCenter?
⭐️ 개발/iOS & Swift

[iOS] NotificationCenter?

2021. 7. 29. 03:00
728x90
반응형

 

🔹 Notification? 

  • observer들에게 전달되는 구조체로 정보가 담겨있고, 해당 알림을 등록한 observer에게만 전달됩니다. 구조체는 아래와 같이 구성되어 있습니다.

 

1️⃣ name : 전달하고자 하는 notification의 이름 (이걸 통해 알림을 식별)

2️⃣ object : 전달하고자 하는 데이터(객체) (없으면 nil)

3️⃣ userInfo : notification과 관련된 값 (없으면 nil) = extra data를 보내는데 사용 가능

 

 


🔹 NotificationCenter? (=NSNotificationCenter)

  • notification이 오면 Observer Pattern을 통해서 등록된 observer들에게 notification을 전달하기 위해 사용하는 클래스입니다.
  • NotificationCenter를 통해서 앱의 한 파트에서 다른 파트로 데이터를 전달할 수 있습니다. 
  • notification이 오면 등록된 observer list를 스캔합니다.
  • NotificationCenter는 어플리케이션 어느 곳에서, 어느 객체와도 상호작용을 할 수 있습니다.

 

 


🔹 NotificationCenter에 Observer 등록하기

  • notification을 observe 해주기 전에 NotificationCenter에 addObserver 과정을 무조건 먼저 거쳐줘야 원하는 신호를 관찰 가능하니까 주의하도록 합시다!
  • addObserver가 있으면 removeObserver(_:name:object:)도 있는데 방식은 같습니다!

 

self 에서 "myNameNoti"라는 이름을 가진 notificaiton을 관찰할 것이고, 해당 notification이 발생하는 경우에 dataReceived라는 함수를 호출해 실행할 것이다. 라는 뜻입니다.

 

1️⃣ self : notification의 관찰자(observer)가 될 object

2️⃣ selector : notification이 오면 실행할 함수

3️⃣ name : notification의 이름

4️⃣ object : 지정하면 특정 sender로부터만 notification을 받음 (optional)

 

 

notification이 오면 실행해주는 함수는 target-action 패턴과 같은 형식으로 진행된다.

함수는 Notification 객체의 파라미터를 하나 갖게 된다.

 

 

‼️ Notification Name

추가적으로, name을 설정해줄 때

Notification.Name의 extension으로 따로 빼서 쓰면 더 유용하고 편하다.

 


🔹 NotificationCenter로 Post하기 (발송하기)

 

1️⃣ name : 전달하고자 하는 notification의 이름 (이걸 통해 알림을 식별)

2️⃣ object : addObserver의 object 부분과 목적이 동일한데, 특정 sender의 notification만 받고 싶은 경우에 작성해주면 됨 = filter 기능과 같달까?  (없으면 nil)

3️⃣ userInfo : notification과 관련된 값 = extra data를 보내는데 사용 가능 (없으면 nil)

이때 userInfo의 타입은 위에서 말했다시피 [Anyhasable : Any] 이기 때문에 다운캐스팅해서 원하는 타입에 맞춰 작성해주면 된다.

 

 


🔹 NotificationCenter 언제 사용해?

1️⃣  앱 내에서 공식적인 연결이 없는 두 개 이상의 컴포넌트들이 상호작용이 필요할 때

2️⃣  상호작용이 반복적으로 그리고 지속적으로 이루어져야 할 때

3️⃣  일대다 또는 다대다 통신을 사용하는 경우

 

 


그 다음 글은...

NotificationCenter를 사용한 데이터 전달 예제입니다.

많관부..!

 

 

🔗 참고자료 - https://learnappmaking.com/notification-center-how-to-swift/

➕ 혹시 코드 긁어보실 분은.. 긁으시라고..

NotificationCenter.default.addObserver(self, selector: #selector(dataReceived(_:)), name: Notification.Name("myNameNoti"), object: nil)


@objc func dataReceived(_ notification: Notification) {
    // 실행해 줄 코드 ~
}
extension Notification.Name {
    static let didReceiveData = Notification.Name("didReceiveData")
    static let didCompleteTask = Notification.Name("didCompleteTask")
    static let completedLengthyDownload = Notification.Name("completedLengthyDownload")
}
NotificationCenter.default.post(name: Notification.Name("myNameNoti"), object: nil)

 

 

 

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'⭐️ 개발 > iOS & Swift' 카테고리의 다른 글

[iOS] TableView 최상단 cell, safeArea 무시하고 배치하는 법?  (0) 2021.08.02
[iOS] 데이터 직접 전달 방식(4) - NotificationCenter을 통해 전달  (0) 2021.07.29
[iOS] Moya가 모야? - Moya로 Get 통신하기  (10) 2021.07.25
[iOS] TextView - 플레이스홀더, 패딩, 글자 수 제한, 커서, 키보드 dismiss  (0) 2021.07.22
[iOS] Alamofire Multipart/formdata를 통한 이미지 서버 통신  (3) 2021.07.19
    '⭐️ 개발/iOS & Swift' 카테고리의 다른 글
    • [iOS] TableView 최상단 cell, safeArea 무시하고 배치하는 법?
    • [iOS] 데이터 직접 전달 방식(4) - NotificationCenter을 통해 전달
    • [iOS] Moya가 모야? - Moya로 Get 통신하기
    • [iOS] TextView - 플레이스홀더, 패딩, 글자 수 제한, 커서, 키보드 dismiss
    훌이
    훌이

    티스토리툴바