일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 딕셔너리
- 학과별커뮤니티
- 이론
- SwiftUI
- 구름톤 유니브
- forEach
- uikit
- MVVM
- WeatherKit
- ios
- 토이프로젝트
- 협업
- swift
- 대표
- 프로토콜
- 기초문법
- collectionview
- CS
- 스트럭트
- async
- RxSwift
- 앱개발
- 네트워크
- 디자인 패턴
- 실습
- struct
- 세종대학교
- mvc
- AppStore
- 반응형
- Today
- Total
스윞한 개발자
IOS 컴플레션 블럭 / 비동기 처리 본문
이번 포스팅에서는 컴플레션 블럭/비동기처리에 대해 알아보고 실습해보았습니다!
Swift에서의 Completion Block 및 비동기 처리는 비동기 작업을 수행하고 작업이 완료된 후 결과를 처리하는 방법을 제공합니다.
Completion Block(완료 블럭)
* Completion Block은 함수나 메서드의 매개변수로 전달되는 클로저입니다.
* 비동기 작업이 완료되었을 때 호출되어 작업의 결과를 처리합니다.
* 주로 비동기 작업이 완료된 후 결과를 받아와 UI 업데이트, 데이터 처리, 에러 처리 등을 수행합니다.
func fetchData(completion: (Result<Data, Error>) -> Void) {
// 비동기 작업 수행 후
if let data = receivedData {
completion(.success(data))
} else {
completion(.failure(NetworkError.invalidData))
}
}
fetchData { result in
switch result {
case .success(let data):
// 데이터 사용
case .failure(let error):
// 에러 처리
}
}
비동기 처리
* Swift는 비동기 작업을 수행하기 위해 'async'/'await' 패턴을 도입했습니다.
* 'async' 키워드를 사용하여 비동기로 실행될 함수나 메서드를 선언하고, 'await' 키워드를 사용하여 비동기 작업의 결과를 받아옵니다.
* 비동기 작업은 기존의 스레드를 차단하지 않고 백드라운드에서 실행되며, 작업이 완료된 후에 결과를 처리합니다.
func fetchData() async throws -> Data {
// 비동기 작업 수행
let data = try await URLSession.shared.data(from: url)
return data
}
async func process() {
do {
let data = try await fetchData()
// 데이터 사용
} catch {
// 에러 처리
}
}
Task {
await process()
}
먼저 간단하게 비동기 처리의 실습을 해보겠습니다.
기존의 방식대로 fileprivate func을 만들어 viewDidLoad에서 sayHi 함수를 호출해보았습니다.
2초간 지연을 시켜주기 위해 메인 쓰레드에서 빼내서 현재에서 +2를 진행해 2초뒤에 실행해 보겠습니다.
터미널에서는 2초 뒤에 Hi 되었고, completionBlock을 사용하기 위해 위와 같이 함수를 수정해 주었습니다.
해당 함수가 종료된 시점에 completion()을 해줌으로써 종료를 알수 있습니다.
completion에서 종료를 알리고 값을 넘겨줄 수 있습니다.
viewDidLoad() 에서 completion 으로 부터 값을 넘겨받아 터미널에 출력합니다.
ViewController의 실습을 진행하기 위해 로딩 오픈소스를 다운 받습니다.
(커스텀 로딩오픈소스를 다운받아 실행해도 되고, 내장된 UIActivityIndicatorView를 사용해도 됩니다!)
해당 오픈 소스를 다운 받기 위해 pod하지 않고, Xcode에서 바로 다운 받기 위해 Package Dependencies 해줍니다.
KRProgressHUD 패키지를 사용하기 위해 import 해줍니다.
각 로딩 이미지를 실행 시켜줌으로써 completion 실행 전과 후에 로딩 이미지가 추가 됩니다.
Label을 view에 추가해주고
완료 로딩 이미지가 종료 되면, mainTitle의 텍스트를 completion에서 반환된 값으로 변경해줍니다.
viewDidLoad, completion 안에서는 self를 써주어야 실행 가능합니다.
참고(출처) : 개발하는 정대리
'Swift 실습' 카테고리의 다른 글
IOS 스토리보드 커스텀 팝업 다이얼로그 웹뷰 (0) | 2024.01.29 |
---|---|
Xcode14 - NO 스토리보드 세팅 (0) | 2024.01.24 |
IOS 구글 애드몹 배너광고 달기 / 앱 수익화 (0) | 2024.01.24 |
IOS 로또 QR코드 인식 (2) | 2024.01.24 |
IOS splash 스크린 (2) | 2024.01.24 |