티스토리 뷰
[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 |
- Total
- Today
- Yesterday
- METAL
- 플러터 얼럿
- Flutter 로딩
- Flutter Text Gradient
- Flutter Spacer
- 플러터 싱글톤
- DRF APIException
- drf custom error
- Django Heroku Scheduler
- Dart Factory
- Flutter getter setter
- flutter deep link
- 장고 URL querystring
- flutter build mode
- ribs
- Flutter Clipboard
- Sketch 누끼
- SerializerMethodField
- github actions
- cocoapod
- Watch App for iOS App vs Watch App
- Python Type Hint
- flutter dynamic link
- Django Firebase Cloud Messaging
- Django FCM
- PencilKit
- 구글 Geocoding API
- flutter 앱 출시
- ipad multitasking
- 장고 Custom Management Command
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |