티스토리 뷰

🍏/Swift

[Swift] async / await 사용사례

eungding 2021. 7. 6. 10:17
728x90
반응형

[Swift] async / await 동작원리 에서 이어집니다. 

WWDC 2021 - Meet async / await in Swift  중, async / await 에 대한 사용사례를 기록한 글입니다. 

 

 

[1] Async sequences

 

for문에서도 await / async 를 사용할 수 있습니다. 

자세한 내용은 WWDC 21 - Meet AsyncSequence / WWDC 21 - Explore structed concurrency in Swift 를 참고해주세요 

 

 

 

[2] Testing async code

 

예전에 비동기 테스트를 하려면 expection을 setting하고

expection.fulfill 도 해줘야하고

wait도 불러줘야하고 

불편했습니다. 

 

 

하지만 async를 쓰면

불편한 것들이 싹 사라집니다. 

 

 

그리고  XCTAssertNoThrow 를 쓰면

throw를 하지 않는 지를 더 간단하게 검증할 수 있습니다. 

 

 

[3] Bridging from sync to async 

 

onAppear modifier는 non-async closure 이기 때문에

이 안에서 await을 써주면 아래와 같은 에러가 납니다.

 

 

이럴 때는 async task function을 써주면 됩니다.

async task 는 클로져에 있는 작업을 감싸서 system에게 보냅니다.

next available thread에 immediate execution 해달라고 요청하며..! 

 

 

[4] Async APIs in the SDK

 

예전에 completionHandler로 제공하던 API들을 

 

 

async하게 제공합니다. 

 

 

그리고 예전에 delegate에도 completion Handler를 사용했습니다..! 

예를들어 Clockit Complication DataSource 부분을 봅시다. 

 

 

이제 이렇게 제공합니다.

 

 

[5] Bridiging completionHandler to Async 

 

아래와 같이 completionHandler를 받는 메소드를

Async function으로 래핑하고 싶다고 해봅시다. 

 

 

await / resume 되는 원리를 기억하며

 

 

withCheckedThrowingContinuation 를 사용해주면 됩니다.

 

 

주의사항이 있는데, continuation.resume은 every path에 딱 한번만 불려야합니다.

 

 

그리고 delegate callback으로 notify 해주는 경우에서는

아래와 같이 async/await을 adopt할 수 있습니다. 

 

 

 

반응형

'🍏 > Swift' 카테고리의 다른 글

[Swift] Self Type  (0) 2021.11.22
[Swift Algorithms] chunks(ofCount:)  (0) 2021.09.28
[Swift] async / await 동작원리  (0) 2021.07.06
[Swift] async / await 등장배경  (0) 2021.06.30
[Swift] Array popFirst  (1) 2021.05.07
댓글