iOS : Delegate 패턴

버들비·2020년 9월 3일
0

iOS

목록 보기
2/5

example: 이미지 피커 컨트롤러

SampleViewController.swift

// 버튼을 클릭했을 때 호출되는 메소드
@IBAction func pick(_ sender: Any) {
	// 이미지 피커 인스턴스를 생성한다
    let picker = UIImagePickerController()
    
    //'이미지 피커 컨트롤러 인스턴스의 델리게이트'를 '현재의 뷰컨트롤러 인스턴스'로 설정한다.
    picker.delegate = self
    
    // 이미지 피커 화면을 표시한다
    self.present(picker, animated: false)
}

위의 뷰 컨트롤러 코드는 이미지 피커 컨트롤러를 실행하면서 몇 가지 권한과 조건을 걸어둔다.

"뷰 컨트롤러는 이미지 피커 컨트롤러 동작에 간섭하지 않을테니, 특정 이벤트가 발생했을때 뷰 컨트롤러에도 알려달라"

알려주는 방식은 메소드 호출이고, 이때 호출되는 메소드를 델리게이트 메소드 라고 한다.

특정 이벤트가 발생하면 이미지 피커 컨트롤러는 delegate 속성에 저장된 참조 정보를 바탕으로 델리게이트 메소드를 찾아 호출한다.

즉, SampleViewController 클래스 내의 델리게이트 메소드를 호출하는 것이다.

뷰 컨트롤러 클래스 안에 다음과 같이 호출될 델리게이트 메소드를 구현해 줘야 한다.

SampleViewController.swift

// 이미지 선택을 완료했을 때 호출되는 메소드
	func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: Any]) {
    // 선택된 이미지를 미리보기에 표시한다
    self.preview.image = info[UIImagePickerControllerEditedImage] as? UIImage
    
    // 이미지 피커 컨트롤러를 닫는다
    picker.dismiss(animated: false)
}

델리게이트 메소드는 언제 어떤 상황에서 어떤 이름의 메소드를 호출할지 미리 약속되어 있다. 구현 과정에서 임의로 메소드의 이름과 형식을 바꾸는것은 허용되지 않는다.

0개의 댓글