# 공부를 위해 정리하는 글이므로, 정확하지 않을 수 있습니다. 

 

 

> 객체간 통신하는 방법에는 세 가지가 있다.

1. Notification
2. Delegate
3. Callback

 이 중, Notification 을 이용해 통신하는 방법에 대해 먼저 알아볼 것이다.

 

 

> Notification은 다른 뷰를 보고있음에도 띄워지지 않은 뷰의 메서드를 사용해 어떠한 이벤트를 처리하는 방법을 말한다. 예를 들어, 뷰A 버튼을 클릭했을 때 뷰B의 라벨 텍스트를 변경하는 것 등이 있을 것이다.

방법을 간단하게 살펴보면,

  1. addObserver를 이용해 NotificationCenter에 Notification 을 등록하고,

  2. post 를 이용해 노티를 발송해 연결된 함수를 실행한다.

 


[예제] NotiViewController에서 버튼 클릭 시, ViewController의 배경색을 변경한다.

 

- ViewController에서 노티피케이션을 등록한다.

NotificationCenter.default.addObserver(self,
                                       selector: #selector(changeBackground),
                                       name: NSNotification.Name(rawValue: "FirstNotification"),
                                       object: nil)

 

  • #selecter 에는 노티피케이션 수신 시 실행될 메서드를 넣어준다.

  • name에는 해당 노티피케이션의 고유 이름을 정해준다.

  • 여기서는 배경색을 바꿔주는 changeBackgroundColor 메서드를 호출했다.

    근데, #selector(changeBackground) 부분에서 'Argument of '#selector' refers to instance method 'changeBackground()' that is not exposed to Objective-C' 라는 오류메시지가 났다.

    func changeBackground()@objc changeBackground 로 변경해줘서 오류메시지가 사라졌는데, 왜 그런지 이유를 모르겠다..

 

- NotiViewController 에서 노티피케이션을 보낸다

NotificationCenter.default.post(name: Notification.Name(rawValue: "FirstNotification"), object: message)
  • name: 부분에 addObserver 메서드에서 정해놓은 고유이름을 넣어준다.

 

 

> 결과화면은 다음과 같다.

+ Recent posts