Notification Center
Categories: swift
NotificationCenter
특정 Event 가 발생했을때 NotificationCenter 한테 post 를 이용해서 Notification 을 전달하는것을 배웠었다.
그렇게되면 NotificationCenter 에 등록이 되어있던 Observer 가 Notification 에 대한 처리를 한다.
그런데 만약에 Notification 을 통해 특정 정보를 전달해야될때는 어떻게 해야되는지 공부해봤다.
이걸 구현하기 위해서는
post 함수랑 addObserver 의 selector 메서드를 조금씩 바꿔줘야한다.
post 함수에서
func post(name aName: NSNotification.Name,
object anObject: Any?,
userInfo aUserInfo: [AnyHashable : Any]? = nil)
위와 같이 userInfo 를 통해 NotificationCenter 로 데이터를 전달하면 되는데,
userInfo 는 [AnyHashable : Any]? 의 타입으로 저장을하면 된다.
즉, 전달하고싶은 데이터를
key 와 value 로 전달해서
addObserver 의 #selector 메서드로 받아서 적절히 적용시키면 된다.
NotificationCenter.default.addObserver(self,
selector: #selector(newEvent),
name: Notification.Name.newEvent,
object: nil)
단, addObserver 에서 newEvent #selector 메서드를 만들때
@objc private func newEvent(notification: Notification) {
이런식으로 Notification 을 매개변수로 받도록 구현해야된다.
근데 여기서 특이한게, 위에 addObserver 코드에서 selector: #selector(newEvent) 를 할때 newEvent 에 매개변수를 안넣는다.
이게 왜 이런건지 좀 궁금하다.
Notification 을 저기다 넣는 방법이 없긴한데, 매개변수 없이 Notification 이 어떻게 메서드 안으로 전달되는 것인지 궁금하다.