# 공부를 위해 정리하는 글이므로, 정확하지 않을 수 있습니다.
> 객체간 통신하는 방법에는 세 가지가 있다.
1. Notification 2. Delegate 3. Callback |
이 중, Notification 을 이용해 통신하는 방법에 대해 먼저 알아볼 것이다.
> Notification은 다른 뷰를 보고있음에도 띄워지지 않은 뷰의 메서드를 사용해 어떠한 이벤트를 처리하는 방법을 말한다. 예를 들어, 뷰A 버튼을 클릭했을 때 뷰B의 라벨 텍스트를 변경하는 것 등이 있을 것이다.
방법을 간단하게 살펴보면,
-
addObserver를 이용해 NotificationCenter에 Notification 을 등록하고,
-
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 메서드에서 정해놓은 고유이름을 넣어준다.
> 결과화면은 다음과 같다.
'iOS > iOS 앱개발' 카테고리의 다른 글
[swift] 웹통신하기 - 0. 네트워크 기본 지식 (0) | 2019.12.01 |
---|---|
[swift] 앱에서 다른 앱 호출하기2 (1) | 2019.12.01 |
[Swift] 앱에서 다른 앱 호출하기 (0) | 2019.11.18 |
[Objective-C] delay 주기 (0) | 2019.11.16 |
[swift] Codable을 이용해 json 파일 파싱하기 (0) | 2019.11.16 |