이 문서에서는 대리인 및 대리인 생성에 대해 알아봅니다. 우선,
대리인이란 무엇입니까?
Delegate는 객체 간의 통신을 나타내는 간단한 용어입니다. 개체를 연결하고 개체 간의 통신을 수행하는 간단한 방법입니다.
대리인은 어떻게 작동합니까?
프로토콜의 도움으로 대리자가 생성됩니다. 프로토콜은 클래스에서 선언되며, 그 안에서 다른 클래스에 알려야 하는 이벤트가 발생합니다. 프로토콜에서 함수 선언을 작성하고 호출 클래스 내부에 정의됩니다.
대리인을 만드는 방법은 무엇입니까?
예제 프로젝트의 도움으로 이 작업을 수행합니다.
수행 단계 -
-
클래스를 만들고 이름을 FirstViewController로 지정한 다음 다른 클래스를 만들고 SecondViewController라고 합니다. 스토리보드에서 각각의 보기 컨트롤러를 만듭니다.
-
SecondViewController에서 프로토콜을 선언하십시오. 프로토콜은 클래스 또는 다른 개체 외부에서 선언됩니다.
protocol SecondViewControllerDelegate { func buttonPressedInVC2() }
-
SecondViewController에서 방금 만든 대리자의 선택적 개체를 만듭니다.
var delegate: SecondViewControllerDelegate?
-
프로토콜에 선언된 함수를 호출해야 합니다. SecondViewController에서 어떤 이벤트가 발생하면 두 번째 뷰 컨트롤러에서 버튼을 눌렀을 때 발생하는 이벤트를 생성해 보겠습니다.
@IBAction func buttonTapped(_ sender: UIButton) { self.delegate?.buttonPressedInVC2() self.navigationController?.popViewController(animated: true) }
이것은 모두 SecondViewController에서 필요합니다. 이제 FirstViewController에서 작업하겠습니다.
-
FirstViewController를 SecondViewControllerDelegate에 준수/구현해야 하며 자동으로 프로토콜 스텁을 추가하도록 요청합니다.
extension FirstViewController: SecondViewControllerDelegate { func buttonPressedInVC2() { } }
-
방금 구현한 프로토콜 내에서 이 대리자 작업이 발생할 때 실행할 코드를 작성해야 합니다.
FirstViewController에서 레이블을 만들고 대리자 메서드가 호출될 때 텍스트를 변경해 보겠습니다.
extension FirstViewController: SecondViewControllerDelegate { func buttonPressedInVC2() { self.lblOne.text = "Delegate Implemented" } }
-
마지막 단계는 SecondViewController의 대리자 개체가 선택 사항이고 할당될 때까지 nil이 된다는 것입니다. 따라서 FirstViewController에서 FirstViewController에서 SecondViewController로 이동하는 동안 해당 개체를 할당합니다.
이를 위해 FirstViewController에 버튼을 생성해 보겠습니다.
@IBAction func goToNextVC(_ sender: Any) { let vc = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController vc.delegate = self self.navigationController?.pushViewController(vc, animated: true) }
-
그리고 아직 깨닫지 못했다면 탐색 컨트롤러에 FirstViewController를 포함해야 합니다. 앱을 실행하고 어떻게 작동하는지 봅시다.