ํ๋ง๋๋ก ์์ฝํ์๋ฉด sequence protocol์ async ๊ธฐ๋ฅ์ ๊ฐ๋ฅํ๊ฒ ํ protocol
async/ await ํค์๋๋ฅผ ์ฌ์ฉํด ๋น๋๊ธฐ๋ฅผ ์ข ๋ ํธ๋ฆฌํ๊ฒ ๋ค๋ฃจ๊ฒ ํ๋๋ฐ collection type์ ๋ํด ์ฐ๋ฆฌ๋ for, while ๊ฐ์ sequence ๋ฃจํ๋ฅผ ๋ง์ด ์ฌ์ฉํ๋จ ๋ง์ด์ง ?
ใ
ใ
ใ
ใ
์ด์ ๋ํ async๋ ๋ง๋ค๊ฒ ์ ํด์ ๋ง๋ค์ด์ง ํ๋กํ ์ฝ --> AsyncSequence
์ฆ sequence๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๋ง๋ค๊ฒ ๋ค๋ ๊ฒ๋ง ๋ค๋ฆ ๋๋ค ์ธ์ ์์๋ sequence๋ฅผ ์๊ณ ์๋ค๋ฉด ์ด๋ฏธ asynceSequence๋ฅผ ์๋๊ฒ๊ณผ ๋ค๋ฆ์ด ์๋ค๊ณ ์ธ๊ธํ๊ณ ์๋๋ฐ์ ์ธ์ ๋ด์ฉ์ ์ ๋ฆฌํด๋ด ์๋ค.
asyncSequence๋ฅผ ์ฌ์ฉํ ์ฝ๋๋ ์์ ๊ฐ์ต๋๋ค.
์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ง๋ค์ด์ง url์ lines์ ๋ํด ์ฒซ๋ฒ์งธ ์ค์ ์ฝ๊ณ dropํ๋ dropFirst() ํจ์๋ฅผ ํตํด ํ์ค์ฉ event ๋ณ์๋ก ์ฝ๊ณ ์๋๋ฐ์ฌ
์ ๊ตฌ๋ฌธ์ ์์ธํ ๋ณด๋ฉด line์ ๋น๋๊ธฐ ์ํ์ค๊ฐ response ๋๋๋๋ก ๊ฐ ๋ผ์ธ์ ๋ฐฉ์ถํ๊ณ ์์ต๋๋ค.
์คํธ await ํ๊ณ ์๋ ํจ์์ return ๊ฐ์ด AsyncDropFirstSequence์ด๊ณ ์ด๋
AsyncSequece ํ๋กํ ์ฝ์ ์ค์ํ๊ณ ์๋๊ฑธ ๋ณผ ์ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด sequence์ asyncSequence๋ ๋ญ๊ฐ ๋ค๋ฅผ๊น์ ?
์ผ๋ฐ sequence์ ๊ฐ์ง๋ง ๋ช๊ฐ์ง ๋ค๋ฅธ์ ์ด ์์ต๋๋ค.
1. ๊ฐ ์์๋ ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐํ๋ฉ๋๋ค.
2. ๋น๋๊ธฐ ์ ๋ฌ์ด๊ธฐ ๋๋ฌธ์ ์คํจํ ๊ฐ๋ฅ์ฑ์ด ์๊ณ ์ด๋ฅผ throw ํ ์ ์์ต๋๋ค.
3. error๊ฐ ๋ฐ์ํ๊ฑฐ๋ throw ๋๋ฉด ์ข
๋ฅ๋ฉ๋๋ค.
์ผ๋ฐ์ ์ธ for in ๋ฃจํ์ ๊ฒฝ์ฐ์
๋๋ค.
์ํ์ค์์ ์ง์ง์ ๋ฐ๋ณตํ ๋ค์ ํฌ๊ธฐ๊ฐ ํน์ ๊ฐ์ ์ด๊ณผํ๋ฉด displaySignificantEarthquake() ํจ์๋ฅผ ํธ์ถํ๊ณ ์์ต๋๋ค.
์ปดํ์ผ๋ฌ๋ ์ด๋ฅผ ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
makeIterator() ํจ์๋ Sequence ํ๋กํ ์ฝ์ ์ฑํํ๋ฉด ๊ฐ์ง๊ฒ ๋๋ ํจ์์ด์ฃ .
quakes๋ฅผ makeIterator()๋ฅผ ํตํด interator๋ก ๋ง๋ ๋ค์ ๋ง๋ค์ด์ง iterator ๋ณ์๋ฅผ ์ฌ์ฉํด next๊ฐ ํธ์ถ๋ ๋ iterator๊ฐ ์์ฑํ ๋ชจ๋ ์ง์ง์ ๊ฐ์ ธ์ต๋๋ค.
์ด๋ฅผ ๋น๋๊ธฐ๋ฅผ ์ฌ์ฉํด ๊ฐ์ ธ์ค๋ ์ฝ๋๋ฅด ๋ณ๊ฒฝํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
๋ง์ฝ ๊ฐ์ ธ์ค๋ quakes sequence๊ฐ ๋ค์ด๋ก๋ ์์
์ด ํ์ํ๋ค๋ฉด
try๋ฅผ ์ฌ์ฉํด error๋ฅผ throwํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค.
๋๊ฐ์ for in ๋ฌธ์ ์ฒซ๋ฒ์งธ for in ๋ฌธ์ด ์คํ๋ ํ ์๋ for in ๋ฌธ์ด ์คํ๋๋๋ฐ์.
์ด๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์คํํ๊ธฐ ์ํด์
Task๋ก ์บก์ํ ํ์ฌ ๋ณ๋ ฌ์ ์ผ๋ก ์คํ ํ ์๋ ์์ต๋๋ค.
๋๊ฐ์ ๋ฐ๋ณต์ ๋์์ ์คํํ๊ณ ๋์ค์ ๋ฐ๋ณต์ ์ข
๋ฃํ ์๋ ์์ต๋๋ค.
asyncSequence๋ฅผ ์ฌ์ฉํ ์ ์๋ sequence ํ๋กํ ์ฝ์ property๋ค์ ์๊ฐํ๊ณ ์๋ค์ !!
์์ ๋ง์ ๋น๋๊ธฐ ์ํ์ค๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํ๊ฒ ์ต๋๋ค. ๋น๋๊ธฐ ์ํ์ค๋ callBack์ ์ฌ์ฉํ๊ฑฐ๋ delegate ํจํด์ ์ฌ์ฉํ ๋ ๋งค์ฐ ์ ์ฉํ๋ฐ์.
handler ํจํด์ ์ฌ์ฉํ๋ ์์๋ฅผ ๋ด๋ด
์๋ค.
QuakeMonitor๋ผ๋ ํด๋์ค๊ฐ ์์ต๋๋ค.
ํด๋์ค ์์๋ ํธ๋ค๋ฌ์ quake ๋ชจ๋ํฐ๋ฅผ ์์ํ๊ณ , ์ค์งํ๋ ํจ์๊ฐ ์ ์๋์ด ์์ต๋๋ค.
๊ธฐ์กด ์ฌ์ฉ๋ฒ์ ๋ชจ๋ํฐ ํด๋์ค๋ฅผ ์์ฑํ๊ณ ๊ฐ์ ๊ฐ์ ธ์ค๋ handler๋ฅผ ํ ๋นํ ๋ค์ ๋ชจ๋ํฐ๋ง์ ์์ํ์ฌ handler์๊ฒ ์ง์ง์ ๊ฐ์ ๋ณด๋ด๊ณ ๋์ค์ ๋ชจ๋ํฐ๋ง์ ์ค์งํฉ๋๋ค.
์ด๋ฅผ AsyncStream์ ์ฌ์ฉํด asyncSequence๋ฅผ ์์ฑ ํ ์ ์์ต๋๋ค.
AsyncStream์ ํด๋ก์ ๋ก continuation์ ๋ฐ์์ค๋๋ฐ์. continuation์ ํตํด handler์์ quake๋ฅผ ๋ง๋ค์ด๋ด๊ณ (yield), onTermination์ ํตํด ๋ชจ๋ํฐ๋ง์ stopํ ์ ์์ต๋๋ค. ๋ค์ ๋ชจ๋ํฐ๋ง์ ์์ํ ์ ์์ต๋๋ค.
์ด์ ์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ ๋ชจ๋ํฐ ์ฝ๋๋ฅผ ๋น๋๊ธฐ ์คํธ๋ฆผ ๊ตฌ์ฑ ๋ด์์ ์ฝ๊ฒ ์บก์ํํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ด asyncStream์ ์ฌ์ฉํฉ๋๋ค.
AsyncStream์ ์ฌ์ฉํด ๊ณ ์ ํ asyncSequence๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ buffering๊ณผ cancellation์ ์ฒ๋ฆฌํ๋๋ฐ ์ ์ฉํฉ๋๋ค.
์ค๋ฅ๋ฅผ ๋ํ๋ด์ผ ํ๋ค๋ฉด ?
AsyncThrowingStream์ ํตํด error๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
asyncStream์ ๋ํด์
https://minsone.github.io/swift-concurrency-asyncstream-AsyncThrowingStream
https://zeddios.tistory.com/1341
๋ธ๋ก๊ทธ์์ ๋ ์์ธํ๊ฒ ์์๋ฅผ ํ์ธ ํ ์ ์์ต๋๋ค.
AsyncSequence๋ ๋ ์ด์์ ๋น๋๊ธฐ ๊ฐ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์์ ํ๊ณ ์น์ํ ๋งค์ฐ ๊ฐ๋ ฅํ ๋๊ตฌ์
๋๋ค.
'IOS๐ > WWDC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[WWDC 2021] Make blazing fast lists and collection views (0) | 2022.05.27 |
---|---|
[WWDC 2021] Your guide to keyboard layout (0) | 2022.05.26 |
[WWDC 2021] Protect mutable state with Swift actors (0) | 2022.05.24 |
[WWDC 2021] Meet async/await in Swift (0) | 2022.05.17 |
[WWDC 2020] Advances in diffable data sources (0) | 2022.05.12 |
๋๊ธ