안녕하세요 :D 애플망고입니다🥭
이번에 새로운 앱을 개발하면서 첫 번째 VC에서 두 번째, 세번째 VC로 동일한 데이터를 전달해야 했습니다.
이를 위해 NotificationCenter를 활용해 데이터 전달을 하기로 했습니다.
그럼 NotificationCenter를 활용해 데이터 전달하는 방법에 대해 알아볼까요?
저는 1번 VC에서 2, 3번 VC로 데이터 전달이 필요했습니다.
1. NotificationCenter post
1번 VC
NotificationCenter.default.post(name: Notification.Name("notiName"), object: nil, userInfo: ["data": data])
name: NotificationCenter의 이름입니다. 특정 알림을 구분하는 용도로 사용합니다.
object : 특정 객체에 대해서만 알림을 받고 싶을 때 사용하면 됩니다. 기본값은 nil로, 모든 객체에서 발생한 알림을 받습니다.
userInfo: 전달하고 싶은 데이터를 여기에 저장해서 전달합니다. 딕셔너리의 형태로 사용합니다.
NotificationCenter.default.post(name: .notiName, object: nil, userInfo: ["data": data])
extension Notification.Name {
static let notiName = Notification.Name("notiName")
}
이름은 extension을 통해 따로 정의해서 쓸 수 있습니다.
2. NotificationCenter Observer
2, 3번 VC
NotificationCenter.default.addObserver(self,
selector: #selector(self.receiveData),
name: .notiName,
object: nil)
self는 알림을 수신할 객체를 뜻합니다. 보통은 자기 자신이기 때문에 self를 씁니다.
selector : 알림을 받았을 때 호출될 메서드입니다.
name : NotificationCenter의 이름입니다.
object: 알림을 발송한 객체이며, nil은 모든 객체에서 발생한 알림을 수신합니다.
@objc private func receiveData(_ noti: Notification) {
print(#function)
}
이렇게 함수를 만들어서 selector에 넣어주면 됩니다.
3. Observer 제거해주기
deinit {
NotificationCenter.default.removeObserver(self)
}
메모리 누수를 방지하기 위해 꼭 옵저버를 제거해줍니다.
'iOS > Swift' 카테고리의 다른 글
[iOS/Swift] UISearchBar를 활용한 검색 기능 개발 (0) | 2025.01.06 |
---|---|
[iOS/Swift] Localization 이미지 처리 방법 (0) | 2022.11.24 |
[iOS/Swift] Localization 다국어 처리 방법 (0) | 2022.11.24 |
[iOS/Swift] Image 다크모드 대응하기 (0) | 2022.11.23 |
[Swift] UI 구현 시 Storyboard와 Code Base 비교 (0) | 2022.10.26 |