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
    }

이부분만 넘겨주는 것이다.
다른 내용들이 전혀 들어가지않고 특정 트로토콜 타입으로만들었으니까, 특정 프로토콜 타입만 가져온다.