IOS๐ŸŽ/Combine

[Combine] Subject๋ž€ (AnyPublisher)

Jouureee 2022. 4. 17. 16:45

์ •์˜ :

publisher, subscriber์™€ ๊ฐ™์ด ํ”„๋กœํ† ์ฝœ์ด๋„ค์š” ! 

๊ทธ๋ฆฌ๊ณ  subject๋Š” ์‚ฌ์‹ค publisher๋ž๋‹ˆ๋‹ค. subject๋Š” Publisher ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  send() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰ publisher๋Š” ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฃผ์ฒด์˜€๋‹ค๋ฉด ์ด ๊ฐ’์— ๋‹ค๋ฅธ ๊ฐ’์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ subject์ž…๋‹ˆ๋‹ค.

 

subject๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‘๊ฐ€์ง€ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. PassthroughSubject
  2. CurrentValueSubject

 


PassthroughSubject

downstream ๊ตฌ๋…์ž๋“ค์—๊ฒŒ ์š”์†Œ๋ฅผ ๋ฐฉ์ถœํ•˜๋Š” broadcast ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ๋ฅผ ๋ด…์‹œ๋‹ค.

PassthroughSubject๋ฅผ ๋งŒ๋“ค์–ด subscriber1๊ณผ subscriber2๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. 

์ด๋•Œ send() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ’์„ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.

broadcast ํ•œ๋‹ค๋Š” ๋ง์€ subscriber๊ฐ€ ์—ฌ๋Ÿฟ์ผ๋•Œ ํ•ด๋‹น subject๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ชจ๋“  subscriber์—๊ฒŒ ๊ฐ’์„ ์ „๋‹ฌํ•œ๋‹ค๋Š” ์–˜๊ธฐ์ž…๋‹ˆ๋‹ค.

 

//subscriber1 : hey
//subscriber2 : hey
//subscriber1 : uri
//subscriber2 : uri
//subscriber1 : finished
//subscriber2 : finished

๋งŒ์•ฝ subscriber์˜ ๊ตฌ๋…์„ ์ค‘๊ฐ„์— ์ทจ์†Œํ•œ๋‹ค๋ฉด ์•„์ง ๊ตฌ๋… ์ค‘์ธ subscriber2์—๊ฒŒ๋งŒ uri๊ฐ€ ์ถœ๋ ฅ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 


 

CurrentValueSubject

PassthroughSubject์™€ ๋‹ฌ๋ฆฌ ์ดˆ๊ธฐ๊ฐ’๊ณผ ์ตœ๊ทผ ๋ฐœํ–‰๋œ element์— ๋Œ€ํ•œ buffer๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ๋ฅผ ๋ด…์‹œ๋‹ค.

์ดˆ๊ธฐ๊ฐ’ "Uri"๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์ตœ๊ทผ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

subject๋Š” ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜๋„, ๋ฐœํ–‰ํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— value์™€ send๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

//Uri
//์•ˆ๋…•
//ํ•˜์ด

Subject Type ์‚ญ์ œ

๋งŒ์•ฝ ๋”์ด์ƒ ๊ฐ’์„ ๋ฐœํ–‰ํ•˜์ง€ ์•Š๊ฒŒ๋” ํ•˜๋ ค๋ฉด (์ฆ‰, send()๊ฐ€ ๋”์ด์ƒ ํ•„์š” ์—†์„ ์‹œ) subject ํƒ€์ž…์„ AnyPublisher<Int, Never> ํƒ€์ž…์œผ๋กœ ๋ฐ”๊ฟ€์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

let publisher = passthroughSubject.eraseToAnyPublisher()

 

 

AnyPublisher

๋‹ค๋ฅธ Publisher๋ฅผ ๋ž˜ํ•‘ํ•˜์—ฌ type ์‚ญ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” Publisher

Publisher์˜ ๋˜ ๋‹ค๋ฅธ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์œผ๋กœ ์ค‘์š”ํ•œ ์†์„ฑ์„ ๊ฐ€์ง€์ง€ ์•Š์•„ ์—…์ŠคํŠธ๋ฆผ Publisher์˜ element ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ

swift์—์„œ ํƒ€์ž…์ด ์—†์„๋•Œ Any, AnyObject๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํƒ€์ž…์ด ์—†๋Š”(์ค‘์š”ํ•˜์ง€ ์•Š์•„์„œ) publisher๋ฅผ ์˜๋ฏธ

publisher์—๋Š” Just, Fail, subject ๋“ฑ ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ publisher๊ฐ€ ์žˆ๋Š”๋ฐ ์ด ํƒ€์ž…์„ ์ง€์›Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.