뷰끼리 데이터를 전달하는 여러가지 방법들
뷰끼리 데이터를 전달하는 여러가지 방법들
1. Delefate Pattern
Protocol 정의
1
2
3
protocol AddViewControllerDelegate: AnyObject {
func didAddData(_ data: Item)
}
데이터를 보내는 뷰
1
2
3
4
5
6
7
8
class AddViewController: UIViewController {
weak var delegate: AddViewControllerDelegate?
@objc func saveButtonTapped() {
delegate?.didAddData(item)
...
}
}
데이터를 받는 뷰
1
2
3
4
5
6
7
8
9
10
11
12
13
class MainViewController: UIViewController {
func presentAddViewController() {
let addVC = AddViewController()
addVC.delegate = self
...
}
}
extension MainViewController: AddViewControllerDelegate {
func didAddData(_ data: Item) {
// 데이터 처리
}
}
2. Closure 방식
정의
1
2
3
4
5
6
7
8
9
class AddViewController: UIViewController {
var onDataAdded: ((Item) -> Void)?
// 버튼이 클릭될 경우 클로저로 데이터 전달
@objc func saveButtonTapped() {
onDataAdded?(item)
dismiss(animated: true)
}
}
사용
1
2
3
4
5
let addVC = AddViewController()
addVC.onDataAdded = { [weak self] data in
self?.handleNewData(data)
}
present(addVC, animated: true)
This post is licensed under CC BY 4.0 by the author.