combine

ํ”„๋กœ์ ํŠธ ๐Ÿ› ๏ธ/ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

PassthroughSubject์™€ onReceive ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‚˜์ด์Šคํ•œ ๋น„๋™๊ธฐ์ฒ˜๋ฆฌํ•˜๊ธฐ

๋ฌธ์ œ ์ƒํ™ฉ Combine ์œผ๋กœ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•จ. ๋น„๋™๊ธฐ ์ฝ”๋“œ๋กœ ๋ทฐ๋ชจ๋ธ์— ์žˆ๋Š” ๋ฐฐ์—ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ ํ›„ ๊ทธ ๋ฐฐ์—ด์„ ์ถœ๋ ฅ์„ ํ•ด๋ณด๋‹ˆ ๋นˆ๋ฐฐ์—ด์ด ์ถœ๋ ฅ๋˜๋Š” ์ƒํ™ฉ ํ™ˆ๋ทฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ž‘์—…์„ ํ•˜๋ฉด์„œ onAppear ๋‚ด์—์„œ communityVM.fetchCommunity ๋ผ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฒŒ์‹œ๋ฌผ์„ ๊ฐ€์ ธ์˜ค๋Š” ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  communityVM.communities (๊ฐ€์ ธ์˜จ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฒŒ์‹œ๋ฌผ๋“ค) ๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๋‹ˆ .onAppear { print("onAppear ์‹œ์ž‘") communityVM.fetchCommunity() print(communityVM.communities) // [] ์ถœ๋ ฅ } ๊ฒฐ๊ณผ๋Š” ? “ [ ] “ ๋นˆ๋ฐฐ์—ด์„ ์ถœ๋ ฅํ–ˆ๋‹ค. ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋„˜๋‚˜ ๋‹น์—ฐํ•œ ๊ฒฐ๊ณผ์˜€๋‹ค. ^^ ์›์ธ fu..

ํ”„๋กœ์ ํŠธ ๐Ÿ› ๏ธ/iOS

URLSession + Combine ์กฐํ•ฉ์œผ๋กœ ๋„คํŠธ์›Œํฌ ๋ ˆ์ด์–ด ๋งŒ๋“ค๊ธฐ

์šฐ๋ฆฌ๊ฐ€ Firebase Firestore RestAPI ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ, ๊ธฐ์กด์— ์‚ฌ์šฉํ–ˆ๋˜ SDK ๋ฅผ ์‚ฌ์šฉํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์‹œ ์ƒˆ๋กœ ๊ตฌํ˜„ํ•ด์•ผํ–ˆ๋‹ค. ๋จผ์ € ์šฐ๋ฆฌ๋Š” Firestore๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ ์˜ค๊ณ , Firestore ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด URLSession ์„ ์‚ฌ์šฉํ•ด์„œ ๋„คํŠธ์›Œํฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ–ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฐฉ์‹์ค‘ Combine์„ ์ฑ„ํƒํ•˜์—ฌ Combine ๊ณผ URLSession ์ด ๋‘˜ ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋จผ์ € ํฐ ๊ตฌ์กฐ๋กœ ํ•œ๋ฒˆ ์ƒ๊ฐํ•ด๋ณด๋ฉด, ๐Ÿค” URL ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•œ Publisher ์™€ Publisher ๋ฅผ ๊ตฌ๋…ํ•ด์„œ Publisher์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฐ’์„ ์ฒ˜๋ฆฌํ•  Subscriber ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ๋„คํŠธ์›Œํฌ ๋ ˆ์ด์–ด๋ฅผ ๊ตฌํ˜„ํ•  ๊ฒƒ์ด๋ƒ ! ๐Ÿค” ์ €..

ํ”„๋กœ์ ํŠธ ๐Ÿ› ๏ธ/iOS

Combine(3): Operator

์–ด๊น€์—†์ด ๋Œ์•„์˜จ Combine ์„ธ๋ฏธ๋‚˜ 3ํƒ„ ๋งˆ์ง€๋ง‰์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” Operator ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!! Operator ? Operator ๋Š” Publisher์—๊ฒŒ ๋ฐ›์€ ๊ฐ’์„ ๊ฐ€๊ณตํ•ด์„œ Subscriber์—๊ฒŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Combine์—์„œ๋Š” ์ •๋ง ๋‹ค์–‘ํ•œ operator ๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ์š”! Operator ๋Š” ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์นญ๊ตฌ์ธ์ง€ ์•Œ์•„๋ณด๊ธฐ์œ„ํ•ด์„œ ๋Œ€ํ‘œ์ ์œผ๋กœ Operator์˜ ๋นŒํŠธ์ธ ํƒ€์ž…์ธ map, filter ๋ฅผ ์‚ฌ์šฉํ•ด๋ณผ๊ฒŒ์š”! 1. map Swift ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ’€๋•Œ ์–ด๋–ค ์—ฐ์†๊ฐ’์„ ์ƒˆ๋กœ ๋งคํ•‘ํ•ด์„œ ๋ณ€ํ™˜ํ•œ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๋•Œ map ํ•จ์ˆ˜๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ฃ ! map ํ•จ์ˆ˜๋Š” ์–ด๋–ค ๋ฐฐ์—ด์ด๋‚˜ ์ปฌ๋ ‰์…˜ ๋Œ€ํ•ด ๋ณ€ํ™˜ ํด๋กœ์ ธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐฐ์—ด๋กœ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด์™€ ๋น„์Šทํ•˜๊ฒŒ map Operator ๋Š” ํผ๋ธ”๋ฆฌ์…”๊ฐ€..

ํ”„๋กœ์ ํŠธ ๐Ÿ› ๏ธ/iOS

Combine(2): Subject

์ง€๋‚œ ์‹œ๊ฐ„์— ์ด์–ด ๋‘๋ฒˆ์งธ๋กœ ๋Œ์•„์˜จ Combine ์„ธ๋ฏธ๋‚˜ 2ํƒ„์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” Subject ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!! ๋‘๋‘ฅ ๐Ÿคฉ Subject? https://developer.apple.com/documentation/combine/subject Subject | Apple Developer Documentation A publisher that exposes a method for outside callers to publish elements. developer.apple.com Subject ๋Š” ๋ฌด์—‡? ๋ณด์•„ํ•˜๋‹ˆ Publisher ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๊ณ ์žˆ๊ณ , Publisher ๋ผ๋Š”๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์ฃ  ,, ๊ทธ๋Ÿผ ๊ทธ๋™์•ˆ ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋˜ Publisher์™€๋Š” ์–ด๋–ค ์ฐจ์ด์ ์ด ์žˆ์„๊นŒ์š”? ⇒ ๋ฐ”๋กœ se..

WonderPark
'combine' ํƒœ๊ทธ์˜ ๊ธ€ ๋ชฉ๋ก