๋ฌธ์ ์ํฉ
Firestore SDK ๋ฅผ ๋ฒ๋ฆฌ๊ณ RestAPI ๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ๊ฒ์ ์ฑ๊ณตํ๋ค.
๊ทธ๋ฐ๋ฐ, ๋๋ฏธ ๋ฐ์ดํฐ๊ฐ ์์ฌ๊ฐ๋๊น ์์์น ๋ชปํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฐ.
์ด๋ค ๋ฌธ์ ์๋๋ฉด,
๋ฐ์ดํฐ๊ฐ 20๊ฐ ์ด์ ํ๋ฒ์ ๋ถ๋ฌ์์ง์ง ์์๋ค. ์ด๊ฒ ๋ฌด์จ,,,,?
์ผ์ ์ด๊ฒ ๋ชจ๊ผฌ ํ๊ณ get ์์ฒญ์ ๋ณด๋ด๋ณด์๋ค.
๋จผ์ ๋ชจ๋ ์ ์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ค๋ ์์ฒญ์ ๋ณด๋ด๋ณด์๋ค.

์์ฒญ์ ๋ํ ์๋ต์ผ๋ก๋

์์ฒญ๋๊ฒ ๊ธด json ๋ฐ์ดํฐ๋ค๊ณผ ํจ๊ป ๋งจ ๋ง์ง๋ง์
“nextPageToken” ์ ๋ณด๋ด์ฃผ์๋ค.
์์ธ
๊ทธ๋์ ์ด์๋ฏธ ๊ตฌ๊ธ๋งํด๋ณธ ๊ฒฐ๊ณผ
firebase RESTAPI ๋ฅผ ์ฌ์ฉํ ๋ 20๊ฐ๊ฐ ๋์ด๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ฌ๋๋
get ์์ฒญ URL ์ ํ๋ผ๋ฏธํฐ์ nextPageToken์ ํจ๊ป ๋๊ฒจ์ฃผ๋ฉด ๋๋ค๊ณ ํ๋ค.
๊ทธ๋ฐ๋ฐ get ์์ฒญ์ ๋ณด๋ผ๋๋ง๋ค nextPageToken์ด ์๋ก ๋ฐ๊ธ๋๊ธฐ ๋๋ฌธ์
๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ฆ์ ๋ฐ๋ก ๋ค์ nextPageToken์ ์ค์ด์ ๋ค์ ๋ฐ์ดํฐ์ ๋ํ ์์ฒญ์ ๋ณด๋ด์ผํ๋ค.
๋ง์ฝ์ ๋ฐ์ดํฐ๊ฐ 60๊ฐ๋ผ๋ฉด 20๊ฐ → 20๊ฐ → 20๊ฐ ๋ฐ์์ค๋ ์์ผ๋ก ์ด 3๋ฒ์ ์์ฒญ์ ๋ค๋ค๋ฅ ๋ณด๋ด์ผํ๋ ๊ฒ์ด๋ค. ํํ
ํด๊ฒฐ ๋ฐฉ๋ฒ
๊ทธ๋ผ ๋จผ์ ๊ตฌํ๋ ์ฝ๋๋ฅผ ํ๋ฒ ๋ณด์
func fetchUser(nextPageToken: String) {
UserService.getUser(nextPageToken: nextPageToken)
.receive(on: DispatchQueue.main)
.sink { (completion: Subscribers.Completion<Error>) in
} receiveValue: { (data: UserResponse) in
self.userTemp.append(contentsOf: data.documents)
if !(data.nextPageToken == nil) {
var nextPageToken : String = ""
nextPageToken = data.nextPageToken!
self.fetchUser(nextPageToken: nextPageToken)
}else{
self.users = self.userTemp
self.userTemp.removeAll()
self.fetchUsersSuccess.send(data.documents)
}
}.store(in: &subscription)
}
๋จผ์ ์ด ์ฝ๋๋
์์ fetchUser ๋ฉ์๋๋ ๋ชจ๋ ์ ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฉ์๋์ด๋ค.
๋ทฐ์์ ๋ชจ๋ ์ ์ ์ ์ ๋ณด ๋ฆฌ์คํธ๊ฐ ํ์ํ ๋ ์ฃผ๋ก onAppear์์ fetchUser ๋ฅผ ํธ์ถํ๋ค.
๊ทธ๋ผ ์ด์ ์ด ์ฝ๋์ ๋ก์ง์ ๋ํด ์ค๋ช ํด๋ณด๊ฒ ์ต๋๋ค!
๋ง์ฝ ์์์ ์ด์ผ๊ธฐ ํ๊ฒ์ฒ๋ผ ์ ์ ๋ฐ์ดํฐ๊ฐ ์ด 60๊ฐ๋ผ๋ฉด ์ด 3๋ฒ์ ๋คํธ์ํฌ ์์ฒญ์ ํด์ผํ๋ค.
์ด๋ ๊ฒ ์ฒ์ View ์์ fetchUser๋ฅผ ํ๋ผ๋ฏธํฐ์ ๋น๋ฌธ์์ด์ ๋ฃ๊ณ ํธ์ถํ๋ฉด
userVM.fetchUser(nextPageToken: "")
1. nextPageToken ์ด ํฌํจ๋ ์ฒ์ 20๊ฐ์ ์ ์ ์ ๋ณด ๋ฐ์ดํฐ์ ์ด receiveValue (data: ) ์ ๋ค์ด์ฌ๊ฒ์ด๋ค.
2. ๊ทธ๋ผ userTemp ํ๋กํผํฐ์ ๋จผ์ ๋ฐ์์จ 20๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ฃผ๊ณ ,
3. data ์ nextPageToken ์ด nil ์ผ ๋๊น์ง (๋ฐฉ๊ธ ๋ถ๋ฌ์จ ๋ฐ์ดํฐ๊ฐ ๋ง์ง๋ง์ผ๋ก ๋จ์ ๋ฐ์ดํฐ์ผ๋) !!
data ์ nextPageToken ์ด nil ์ด ์๋๋ฉด self.fetchUser(nextPageToken: nextPageToken) ์ด๋ ๊ฒ ๋ฃ์ด์ ์์ฒญ์ ๋ณด๋ด์ค๋ค.! ( == ์ฌ๊ทํจ์์ฃ ! )
4. ๊ทธ๋ฌ๋ค nextPageToken ์ด nil์ด๋ฉด users ํ๋กํผํฐ์ userTemp๋ฅผ ์ ์ฅํ๊ณ
5. ๋ง์ง๋ง์ผ๋ก userTemp ํ๋กํผํฐ๋ฅผ ์ด๊ธฐํ ์์ผ์ค๋๋ค.
why?
๊ทธ๋ผ ์ userTemp ํ๋กํผํฐ๋ฅผ ๋ฐ๋ก ๋์ด์ผ ํ ๊น์?
์ฒ์์ Temp ์์ด ๋ ๋ค users ์ append ๋ฅผ ํ๋ ๋ฐฉ์์ผ๋ก ํด๋ณด๋
๋ทฐ์์ ๊น๋นก๊ฑฐ๋ฆผ ํ์์ด ๋ํ๋๋๋ผ๊ตฌ์ ๐ณ โก๏ธ
์๊ทธ๋ฐ์ง ๊ณ ๋ฏผํด๋ณด๋ ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ฌ์ 3๋ฒ ๋ค๋ค๋ฅ ๋ฐ์์์
๋ทฐ์ ์ง์ ์ฐ๊ฒฐ๋ users ๋ฐฐ์ด์ ์ ๋ฐ์ดํธ ํ๋๊น
๋ทฐ์์๋ ๊ทธ ๋ค๋ค๋ฅ ์ ๋ฐ์ดํธ ๋๋ ๊ฒ์ด ๊น๋นก๊ฑฐ๋ฆฌ๋ฉด์ ๋ณด์ด๋๊ฒ ๊ฐ๋๋ผ๊ตฌ์!?
๊ทธ๋์ temp์ ๋จผ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์์ฃผ๊ณ , ๋ค ๋ด์์์๋ users ๋ฅผ ํ๋ฒ๋ง ์ ๋ฐ์ดํธ ํด์ฃผ์ด ํด๊ฒฐํ์ต๋๋ค ๐
๊ตฟ๊ตฟ
๋๋์
ํด ์ด๊ฑฐ ๋ฉ์๋ ๋ง๋ค๋ค๊ฐ ๋ก์ง์ ์๋ชป๋ง๋ค์ด์ ๋ฌดํ๋ฃจํ๋๋ฌธ์ ํ์ด์ด๋ฒ ์ด์ค๊ฐ ํฐ์ง๋ป ํ๊ธฐ๋ ํ์ง๋ง …. ใ ใ
์ฌ๊ท ํจ์๋ฅผ ์จ์ ์์ฅฌ ๋์ด์คํ๊ฒ ํด๊ฒฐํด์ ๊ธฐ๋ถ์ด ์ข์ต๋๋ค.
๊ฒฐ๊ตญ์ ํด๊ฒฐ ~~~ ํ์ต๋๋ค !!!
๊ทธ๋์ ์ค๋๋ ํด๊ฒฐ์ ~ ๐คฉ
'ํ๋ก์ ํธ ๐ ๏ธ > ํธ๋ฌ๋ธ ์ํ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| task(id: ) ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น? (0) | 2023.06.10 |
|---|---|
| onAppear์ onDisappear์ ํธ์ถ ํ์ด๋ฐ (0) | 2023.06.10 |
| PassthroughSubject์ onReceive ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๋์ด์คํ ๋น๋๊ธฐ์ฒ๋ฆฌํ๊ธฐ (0) | 2023.06.10 |