오늘은 컴플레션 블럭을 통한 비동기 처리를 해보겠다
동기(Synchronous)
- 동기는 말그대로 동시에 일어난다. 요청을 하는 시점에 결과가 나와야한다.
그래서 요청을 하면 시간이 얼마가 걸리든 결과가 나올때까지 다음 요청을 처리하지 못한다.
코드가 직관적이라는 장점이 있다.
비동기(Asynchronous)
- 비동기는 응답 상태와 상관없이 다음 동작을 수행 할 수있다. A, B 작업이 동시에 수행되며 수행되는 데로 결과 값이 나온다.
ex) 내가 일했던 식당도 비동기방식으로 주문을 처리한다. 주문이 먼저들어온 테이블이라도 오래걸리는 스테이크가 있으면
파스타주문이 있는 테이블 먼저 음식을 뺀다.
일단 유튭 정대리님 영상을 쭉 보고 한줄로 정리하면 이런느낌인것 같다.
일부러 지연을 주고 함수가 끝나는 시점에 접근해 completion 으로 데이터를 전달
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print("ViewController - viewdidLode() called")
sayHi(completion: {result in
print("컴플레션 블락으로 넘겨받았음: \(result)")
})
}
fileprivate func sayHi(completion : @escaping(String) -> ()) {
print("ViewController - sayHi() called")
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
// 딜레이 시킬코드
//print("Say Hi")
completion("하이")
}
}
}

콘솔말고 오픈소스 하나 가져와서 해보았다


로딩이 끝나고 레이블 텍스트 바꿔주기
'iOS > UIKit' 카테고리의 다른 글
| iOS - TabBarController (0) | 2022.07.02 |
|---|---|
| iOS - 프로젝트세팅, SceneDelegagte (0) | 2022.06.30 |
| iOS - 스택자료구조 (0) | 2022.06.28 |