-
Swift AsyncSequence (비동기 시퀀스에 대한 지원)Swift 2021. 12. 22. 13:51
Swift 5.5 async await 과 함께
https://developer.apple.com/documentation/swift/asyncsequence
AsyncSequence라
우선 Async Await 도 알아야한다 : https://kkimin.tistory.com/56 (더이상 completiion 콜백은 안녕~~)
AsyncSequence 란
protocol AsyncSequence
다른곳에서 다음과 같은 예제도 볼 수 있었다.
let url = URL(string: "https://www.donnywals.com")! let sequence = url.lines.map { string in return string.count } for try await line in sequence { print(line) }
출처 : donnywals
- 비동기를 순차적으로 실행할때 우리는 async await 를 어떤식으로 사용할까?
1. add(id: String) 과 show(name: String) 이 비동기 네트워크 요청을 하는 함수라고 할때
let name = await add(id: "1111") // name 이 리턴된다고 가정 let result = await show(name: name) print(result) // 아주 simple 중간 data 가공도 ok
- 비동기 함수를 병렬적으로 호출하는건 어떨까?? => 비동기 호출후 모아서 실행하는 개념
이번에도 add(id: String) 가 비동기 네트워크 요청을 하는 함수라고 할때
let firstName = await add(id: "0") let secondName = await add(id: "1") let thirdName = await add(id: 20") let names = [firstName, secondName, thirdName] show(names) // add 는 비동기라 다른 작업도 하지만, add 자체의 호출은 한번에 하나씩만 됨. // 다른 방식 sync let firstName = await add(id: "0") sync let secondName = await add(id: "1") sync let thirdName = await add(id: 20") let names = await [firstName, secondName, thirdName] show(names) // 여기서 결과들로 실행
simple 하지만 신기하다.
요소들간의 다음과 같은것도 있었다. (apple 문서에 더 많음)
func allSatisfy((Self.Element) -> Bool) -> Bool
: 비동기 시퀀스에 의해 생성된 모든 요소가 주어진 조건자를 충족하는지 여부를 나타내는 Bool 값을 반환합니다.func contains(Self.Element) -> Bool비동기 시퀀스에 지정된 요소가 포함되어 있는지 여부를 나타내는 Bool 값을 반환합니다.에 Element부합할 때 사용 가능 합니다 Equatable.이런 min max도 가능함.func min() -> Self.Element?비교 가능한 요소의 비동기 시퀀스에서 최소 요소를 반환합니다.에 Element부합할 때 사용 가능 합니다 Comparable.아래는 제외 버전func dropFirst(Int) -> AsyncDropFirstSequence<Self>기본 비동기 시퀀스에서 지정된 수의 요소를 생략한 다음 나머지 모든 요소를 통과합니다.당연히 시퀀스 매핑도 된다func map<Transformed>((Self.Element) -> Transformed) -> AsyncMapSequence<Self, Transformed>비동기 시퀀스의 요소에 대해 지정된 클로저를 매핑하는 비동기 시퀀스를 만듭니다.해당 내용을 잘 정리해둔 좋은 글
: https://xho95.github.io/swift/language/grammar/concurrency/2021/06/10/Concurrency.html
728x90'Swift' 카테고리의 다른 글
View의 life cycle (layoutsubviews에 대해) (0) 2021.12.31 Xcode Cloud란 (0) 2021.12.28 Feature flags in Swift (0) 2021.12.22 Swift nil, 왜 null이 아닐까? (0) 2021.12.19 Property Wrapper (0) 2021.12.13