์ด๊น์์ด ๋์์จ Combine ์ธ๋ฏธ๋ 3ํ ๋ง์ง๋ง์ ๋๋ค.
์ด๋ฒ ์๊ฐ์๋ Operator ์ ๋ํด ์ด์ผ๊ธฐ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค!!
Operator ?
Operator ๋ Publisher์๊ฒ ๋ฐ์ ๊ฐ์ ๊ฐ๊ณตํด์ Subscriber์๊ฒ ์ ๊ณตํฉ๋๋ค.
Combine์์๋ ์ ๋ง ๋ค์ํ operator ๋ฅผ ์ ๊ณตํ๋๋ฐ์!
Operator ๋ ์ด๋ป๊ฒ ์ฌ์ฉํ๋ ์นญ๊ตฌ์ธ์ง ์์๋ณด๊ธฐ์ํด์
๋ํ์ ์ผ๋ก Operator์ ๋นํธ์ธ ํ์ ์ธ map, filter ๋ฅผ ์ฌ์ฉํด๋ณผ๊ฒ์!
1. map
Swift ๋ก ์๊ณ ๋ฆฌ์ฆ์ ํ๋ ์ด๋ค ์ฐ์๊ฐ์ ์๋ก ๋งคํํด์ ๋ณํํ ๋ฐฐ์ด์ ๋ง๋ค๋ map ํจ์๋ฅผ ๋ง์ด ์ฌ์ฉํ์ฃ !
map ํจ์๋ ์ด๋ค ๋ฐฐ์ด์ด๋ ์ปฌ๋ ์ ๋ํด ๋ณํ ํด๋ก์ ธ๋ฅผ ์ฌ์ฉํด ๋ฐฐ์ด๋ก ๋ฆฌํดํ๋ ํจ์์ ๋๋ค.
์ด์ ๋น์ทํ๊ฒ map Operator ๋ ํผ๋ธ๋ฆฌ์ ๊ฐ ๋ฐฉ์ถํ ๋ฐ์ดํฐ๋ฅผ ๋ณํ ํด๋ก์ ธ๋ฅผ ํตํด ๋ณํํ ๊ฐ์ Subscriber์๊ฒ ์ ํด์ค๋๋ค.
// Transform
let numPublisher = PassthroughSubject<Int, Never>()
let subscription1 = numPublisher
.map { $0 * 2 }
.sink { value in
print("Tranformed Value: \(value)")
}
numPublisher.send(10)
numPublisher.send(20)
numPublisher.send(30)
subscription1.cancel()
// ์ถ๋ ฅ
// Tranformed Value: 20
// Tranformed Value: 40
// Tranformed Value: 60
2. filter
์ฐ๋ฆฌ๊ฐ ์์ฃผ ์ฐ๋ filter ํจ์๋ ๋ฐฐ์ด์์ ์ด๋ค ํญ๋ชฉ๋ค์ ํฌํจํ๋์ง๋ฅผ ๋น๊ตํด์ ์ํ๋ ๊ฐ๋ง ๋ชจ์ ์๋ก์ด ๋ฐฐ์ด์ ๋ฆฌํดํฉ๋๋ค.
์ด์ ๋น์ทํ๊ฒ filter Operator ๋ ํผ๋ธ๋ฆฌ์ ๊ฐ ๋ฐฉ์ถํ ๋ฐ์ดํฐ๋ฅผ ์ฃผ์ด์ง ์กฐ๊ฑด์ ๊ธฐ๋ฐ์ผ๋ก ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ๊ฐ๋ง์ ํํฐ๋ง์ํจ ๋ฐ์ดํฐ๋ฅผ Subscriber์๊ฒ ์ ํด์ค๋๋ค.
// Filter
let stringPublisher = PassthroughSubject<String, Never>()
let subscription2 = stringPublisher
.filter { $0.contains("a") }
.sink { value in
print("Filtered Value: \(value)")
}
stringPublisher.send("abc")
stringPublisher.send("Jack")
stringPublisher.send("Wonder")
stringPublisher.send("Jenny")
stringPublisher.send("Jason")
subscription2.cancel()
// ์ถ๋ ฅ
// Filtered Value: bc
// Filtered Value: jck
// Filtered Value: Wonder
// Filtered Value: Jenny
// Filtered Value: Json
์ฌ๊ธฐ๊น์ง Combine ์ 3๋์ฅ Publisher, Subscriber, Operator์ ๋ํด์ ๋ชจ๋ ์์๋ดค์ต๋๋ค!
์ฝ๋๋ก ์ ํด๋ณด๋ ๋ ์ดํด๊ฐ ์ ๋๋ ๊ฒ ๊ฐ์ง ์๋์ ?
์ญ์ ์ฝ๋ฉ์ ๋ฐฑ๋ฌธ์ด ๋ถ์ฌ์ผํ ์ ๋๋ค!
์ด์ Combine ์ ํ๋ก์ ํธ์ ์ ์ฉํด๋ด ์๋ค! ๊ฐ๋ณด์๊ณ !!! ๐ฅ๐ฅ๐ฅ๐ฅ๐ฅ
์ฐธ๊ณ
- ํจ์คํธ ์บ ํผ์ค ์์ด๋ณด๋ฅผ ์ํ, ํ ๋ฒ์ ๋๋ด๋ iOS ์ฑ ๊ฐ๋ฐ ๋ฐ์ด๋ธ
'ํ๋ก์ ํธ ๐ ๏ธ > iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Router๊ฐ ๋ญํ๋ ์น๊ตฌ์ผ? (0) | 2023.06.10 |
|---|---|
| URLSession + Combine ์กฐํฉ์ผ๋ก ๋คํธ์ํฌ ๋ ์ด์ด ๋ง๋ค๊ธฐ (0) | 2023.06.10 |
| Combine(2): Subject (0) | 2023.06.10 |
| Combine(1): Publisher, Subscriber! (0) | 2023.06.10 |
| @StateObject @ObserverdObject ๊ทธ๋์ ๋ญ์ ๋ค๋ฅธ๋ (0) | 2023.04.06 |