์์ฆ Set์ด ๋ ๋์ ๊ฐ๋ฐ ์คํ์ผ,, ์ค๋ณต์ ๋ค ์ ๊ฑฐํด๋ฒ๋ฆฌ์
์ง๊ธ ํ๊ณ ์๋ ํ๋ก์ ํธ์์ API๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ช ์ธํ์ต๋๋ค
๊ทธ๋์ ์ด๋ค api๋ฅผ ํธ์ถํ๋์ ๋ฐ๋ผ form์ ๋ณํ๋ ์์ง๋ง data์ ๊ฐ์ ํญ์ ๋ฌ๋ผ์ง๋ค
์ผ๋จ json์ ํ์ฑํ struct๋ฅผ ๋ง๋ค์ด์ฃผ์ด์ผ ํ๋๋ฐ,
๋ชจ๋ api๋ง๋ค struct๋ฅผ ๋ง๋ค๊ฒ ๋๋ฉด
์ด๋ฐ์์ผ๋ก ๊ณ์ํด์ DTO struct์ ์ค๋ณต์ด ์ผ์ด๋๊ฒ ๋๋ค
์ค๋ณต์ด ๋๋ฌด ์ซ์ ๋..
์ ๋ค๋ฆญ์ผ๋ก ๋ฌถ์!
struct ResponseDTO<CommonDataDTO: Decodable> : Decodable {
var success : Bool
var data : CommonDataDTO
var error : ErrorDTO?
}
struct ErrorDTO : Decodable, Error {
let code : Int
let message: String
}
์, ์ด์ json์ ๊ฐ์ ธ์ฌ struct๋ ์์ฑ์ด ๋์์ต๋๋ค
๊ทผ๋ฐ ํญ์ ๊ฐ์ struct๋ก json์ ํ์ฑํ๋ค๋ฉด ๊ทธ ๋ก์ง๋ ๋๊ฐ์ง ์์๊น ?
๊ทธ๋ ๋ค๋ฉด Common Responder๋ฅผ ๋ง๋ค์ด๋์
public struct JsonParser<CommonDataDTO: Decodable> {
public init(){}
//Moya๋ฅผ ์ฌ์ฉํ์ฌ requestํจ
public static func parseResponse(_ result: Result<Response, MoyaError>) -> Result<Any?, Error> {
switch result {
case .success(let response):
do {
let commonResponse = try JSONDecoder().decode(ResponseDTO<CommonDataDTO>.self, from: response.data)
if let error = commonResponse.error {
return .failure(error)
}
return .success(commonResponse.data)
} catch {
return .failure(error)
}
case .failure(let error):
return .failure(error)
}
}
}
๋ณด์๋ค์ํผ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋ CommonDataDTO์ type์ ๊ฒฐ์ ํ์ฌ ๋ฃ์ด์ค ์ ์์ต๋๋ค :)
provider.request(.mainInfo) { [weak self] event in
let result = APIResponder<MainData>.parseResponse(event)
switch result {
case let .success(response):
print(response)
case let .failure(error):
print(error)
}
}
์์ฒญํ๋ ๋ถ๋ถ๊น์ง parseResponse์ ๋ด์๋๊ณ ๊ทธ ๊ฐ์ ๊ตฌ๋ ํ๊ณ ์ถ์๋ฐ,
๋ชจ๋ํ๋ฅผ ์ ์ฉํ ์ํ๋ผ ์์ง MoyaProvider๋ฅผ ์ ๋ค๋ฆญํ๊ฒ ์ฌ์ฉํ ์ ์๋ ์ข์ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์๋ต๋๋ค..๐
๋ง์ฝ provider๊ฐ ํ๊ฐ๋ผ๋ฉด requestํ๋ ๋ถ๋ถ๊น์ง ๋ฉ์๋์ ๋ด์ ์ ์์ด์!
์ข์ ์์ด๋์ด ์์ผ์๋ฉด ๊ณต์ ํด์ฃผ์ธ์ :)
'๐ฑ iOS > Base' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ NetworkManager๋ง๋ค๊ธฐ (feat. Generic) (3) | 2023.05.05 |
---|---|
[Swift] ์๋ฒ์ iOS ์ด๋ฏธ์ง ๋ณด๋ผ ๋ ์ฉ๋ ์ด์ & ํด๊ฒฐ (0) | 2023.03.23 |
[RxSwift] ๊ฐ๋ ์ก๊ธฐ (Subscribe, Observable, Subject) (0) | 2023.02.04 |
[Swift] Custom Calendar ๋ฌ์ ๋ง์ง๋ง ๋ ๊ตฌํ๊ธฐ (0) | 2023.01.16 |
[Stanford iOS] ์ํคํ ์ฒ & MVC (0) | 2022.05.05 |