Post

뷰끼리 데이터를 전달하는 여러가지 방법들

뷰끼리 데이터를 전달하는 여러가지 방법들

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.