Delegate
작성일
Passing data
- 4.Delegate
- delegation pattern
- 대리, 위임, 대신
Delegate
- protocol규격을 준수하는것들만 사용하게 만듬
protocol DelegateDetailViewControllerDelegate: AnyObject {
//데이터를 넘겨주는 함수
//정의만 있고 바디는 있으면 안됨.
func passString(string: String)
}
class DelegateDetailViewController: UIViewController {
weak var delegate: DelegateDetailViewControllerDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func passDataToMainVC(_ sender: Any) {
delegate?.passString(string: "delegate pass Data")
self.dismiss(animated: true, completion: nil)
}
}
프로토콜의 타입 규격이 맞아야 한다.
//ViewController
@IBAction func moveToDelegate(_ sender: Any) {
let detailVC = DelegateDetailViewController(nibName: "DelegateDetailViewController", bundle: nil)
detailVC.delegate = self
self.present(detailVC, animated: true, completion: nil)
}
extension ViewController: DelegateDetailViewControllerDelegate {
func passString(string: String) {
self.dataLabel.text = string
}
위 코드에서보면 self는 DelegateDetailViewControllerDelegate라는 protocol를 준수해야한다.
전에 했던, instance를 넘겨주는건 전부다 넘겨주지만, 이렇게 delegate를 사용하면,
func passString(string: String) {
self.dataLabel.text = string
}
이부분만 넘겨주는 것이다.
다른 내용들이 전혀 들어가지않고 특정 트로토콜 타입으로만들었으니까, 특정 프로토콜 타입만 가져온다.