1. Completion Handlers
•
var comletionHandler: (() -> Void)? { get set }
비동기 작업이 완료되는 호출되는 completion Handler을 사용한다.
작업이 완료 되면 해당 클로저가 호출된다.
func fetchData(completion: @escaping (Data?, Error?) -> Void) {
// 비동기 작업 수행
// 작업 완료 후 completion 핸들러 호출
// 예: 네트워크 요청, 파일 로드 등
}
fetchData { data, error in
if let data = data {
//데이터 사용
} else if let error = error {
//에러 처리
}
}
Swift
복사
2. Delegation
프로토콜과 델리게이트를 사용하여 비동기 작업의 결과를 다른 객체로 전달하는 방법
작업이 완료되면 델리게이트 메서드가 호출된다.
protocol DataFetcherDelegate: AnyObject {
func didFetchData(data: Data)
func didFailWithError(error: Error)
}
class DataFetcher {
//DataFetcher 클래스는 일을 위임할 delegate변수와 fetchData함수를 만든다.
weak var delegate: DataFetcherDelegate?
func fetchData() {
// 비동기 작업 수행
// 작업 완료 후 델리게이트 메서드 호출
}
}
// 사용 예시
let dataFetcher = DataFetcher()
dataFetcher.delegate = self
dataFetcher.fetchData()
extension YourClass: DataFetcherDelegate {
func didFetchData(data: Data) {
// 데이터 사용
}
func didFailWithError(error: Error) {
// 에러 처리
}
}
Swift
복사