델리게이트 통신을 위한 코디네이터 패턴
makeCoordinator()를 사용해 UIKit 델리게이트 콜백을 SwiftUI로 전달합니다.
델리게이트 통신을 위한 코디네이터 패턴은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
Coordinator가 필요한 이유
UIKit 델리게이트에는 객체 참조가 필요합니다. SwiftUI의 값 형식은 델리게이트가 될 수 없습니다. Coordinator가 이 둘을 연결합니다.
struct ImagePicker: UIViewControllerRepresentable {
@Binding var image: UIImage?
// Coordinator will be the UIImagePickerControllerDelegate
}makeCoordinator()
Coordinator 인스턴스를 반환하는 makeCoordinator()를 구현하세요. SwiftUI는 makeUIView/Controller 전에 이를 호출합니다.
func makeCoordinator() -> Coordinator {
Coordinator(self)
}Coordinator 클래스
Coordinator는 일반적으로 델리게이트와 호환되도록 클래스이며, 상위 representable에 대한 참조를 보유합니다.
class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
var parent: ImagePicker
init(_ parent: ImagePicker) { self.parent = parent }
}델리게이트 설정하기
makeUIViewController에서 context.coordinator를 델리게이트로 지정하세요.
func makeUIViewController(context: Context) -> UIImagePickerController {
let picker = UIImagePickerController()
picker.delegate = context.coordinator
return picker
}델리게이트 메서드 구현하기
Coordinator의 델리게이트 콜백은 상위 항목의 바인딩을 변경하여 SwiftUI에 다시 값을 전달합니다.
func imagePickerController(
_ picker: UIImagePickerController,
didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]
) {
parent.image = info[.originalImage] as? UIImage
picker.dismiss(animated: true)
}취소 콜백
취소 델리게이트를 구현하여 picker를 닫고 필요하면 SwiftUI에 알리세요.
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true)
}Coordinator를 통한 데이터 소스
Coordinator는 테이블 뷰나 컬렉션 뷰에서 데이터 소스 프로토콜(예: UITableViewDataSource)도 구현할 수 있습니다.
class Coordinator: NSObject, UITableViewDataSource {
var parent: MyTableView
init(_ p: MyTableView) { parent = p }
func tableView(_ tv: UITableView, numberOfRowsInSection s: Int) -> Int { parent.items.count }
func tableView(_ tv: UITableView, cellForRowAt ip: IndexPath) -> UITableViewCell {
let cell = tv.dequeueReusableCell(withIdentifier: "cell", for: ip)
cell.textLabel?.text = parent.items[ip.row]
return cell
}
}Coordinator 최신 상태 유지하기
SwiftUI가 다시 렌더링되면 updateUIViewController가 호출됩니다. 필요하다면 Coordinator의 참조를 새 상위 항목으로 업데이트하세요.
func updateUIViewController(_ vc: UIImagePickerController, context: Context) {
context.coordinator.parent = self
}여러 델리게이트
Coordinator는 여러 델리게이트 프로토콜을 준수하여 모든 UIKit 콜백을 한곳에서 처리할 수 있습니다.
class Coordinator: NSObject,
UIScrollViewDelegate,
UITextViewDelegate,
UISearchBarDelegate { ... }Coordinator와 @Binding 비교
간단한 값 전달에는 @Binding을 사용하고, UIKit에서 델리게이트 참조가 필요할 때는 Coordinator를 사용하세요.
// Simple: @Binding var text: String -> updateUIView writes uiView.text = text
// Complex: coordinator mediates UITextViewDelegate -> parent.text = textView.textCoordinator 수명 주기
Coordinator는 representable마다 한 번 생성되며 representable이 뷰 계층 구조에 있는 동안 유지됩니다.
// makeCoordinator called once → stable delegate reference
// updateUIView called many times → push state changes빠른 확인
델리게이트 연결 객체를 만들려면 UIViewControllerRepresentable에서 어떤 메서드를 구현해야 하나요?
강의 요약
Coordinator 패턴에서는 makeCoordinator()를 구현하고, UIKit 델리게이트 프로토콜을 준수하는 클래스를 만든 다음, makeUIViewController에서 context.coordinator를 통해 할당합니다. 그리고 parent에 저장된 바인딩을 통해 SwiftUI에 값을 다시 전달합니다.
자주 묻는 질문
“델리게이트 통신을 위한 코디네이터 패턴” 강의는 무료인가요?
네 — “델리게이트 통신을 위한 코디네이터 패턴” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“델리게이트 통신을 위한 코디네이터 패턴”에서 뭘 배우나요?
makeCoordinator()를 사용해 UIKit 델리게이트 콜백을 SwiftUI로 전달합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“델리게이트 통신을 위한 코디네이터 패턴” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- UIViewRepresentable: UIKit 뷰 래핑하기
- 델리게이트 통신을 위한 코디네이터 패턴
- UIViewControllerRepresentable
- UIHostingController: UIKit 안의 SwiftUI