환율 계산기 만들기 Part 1

이득령·2024년 3월 28일

환율 계산기 만들기 (SwiftUI)

오늘은 환율 계산기를 만들어볼게요. 이번에 할 프로젝트는 앱 스토어 등록까지 해보겠습니다.!

API 조사하기


저는 한국술출입은행에서 제공하는 공공데이터인

현제환율 Open API를 사용하겠습니다.

https://www.koreaexim.go.kr/ir/HPHKIR020M01?apino=2&viewtype=C&searchselect=&searchword=

API를 확인해볼게요

https://www.koreaexim.go.kr/site/program/financial/exchangeJSON?authkey=AUTHKEY1234567890&searchdate=20180102&data=AP01
	

위에 있는코드가 한국술출입은행에서 제공하는 샘플 API입니다.

authkey: OpenAPI 신청시 발급된인증키를 입려주시면 됩니다.

searchdate: 원하는 시간대를 입렵해주시면 됩니다(아무것도 입력안하면 현재기준)

data:검색을 요청할 데이터 타입입니다.

그럼 이 데이터를 가지고 PostMan프로그램에서 한번 실제 데이터값을 확인해 보겠습니다.

위와같이 실제 데이터가 나옵니다.

구조체 만들기


먼저 데이터파싱을 하기전에 데이터 구조체 먼저 만들어주겠습니다.

 "result": 1,
        "cur_unit": "USD",
        "ttb": "1,322.73",
        "tts": "1,349.46",
        "deal_bas_r": "1,336.1",
        "bkpr": "1,336",
        "yy_efee_r": "0",
        "ten_dd_efee_r": "0",
        "kftc_bkpr": "1,336",
        "kftc_deal_bas_r": "1,336.1",
        "cur_nm": "미국 달러"

저는 이 데이터가 다 필요하지 않기 때문에 필요한것만 골라서 사용할게요.

필요한데이터:

  • CUR_UNIT = 통화코드
  • TTB = 송금을 보낼때 금액
  • TTS = 송금을 받을때 금액
  • DEAL_BAS_R = 매매 기준율
  • CUR_NM 국가 / 통화명

코드로 구현한 구조체입니다.

import Foundation

struct ExchangeModel: Codable {
    var cur_unit: String
    var ttb: String
    var tts: String
    var deal_bas_r :String
    var cur_nm: String
    

이제 그럼 데이터를 불러올 수 있는 함수를 만들어 봅시다.

함수


let url = "https://www.koreaexim.go.kr/site/program/financial/exchangeJSON?authkey=APIKEY&searchdate=20240325&data=AP01"
    func getCurr_Exchange(completion: @escaping([ExchangeModel]?,String?) -> ()) {
        let session = URLSession.shared
        let decoder = JSONDecoder()
        if let url = URL(string: url) {
            let task = session.dataTask(with: url) { data, response, error in
                guard let data = data else {
                    completion(nil, error?.localizedDescription)
                    return
                }
                do {
                    completion(try decoder.decode([ExchangeModel].self, from: data), nil)
                } catch {
                    print("called Error json", error)
                    completion(nil,error.localizedDescription)
                }
            }// task
                task.resume()
        }// url
        
    } //method

함수를 만들면서 생겼던 이슈들….


함수를 만드는 과정중 첫번째는 구조체 에서 에러가 생겼습니다. taskdata구문에서 내가 무슨 뭘 안지켰다고해서 알고보니 Codable 기준을 준수하지 못했습니다. CodingKey를 할때는 Struct 내에 있는 모든 데이터를 case 구문안에 넣어줘야 되던구요!

두번째 API를 호출 할 데이터가 없다고 뜨는 겁니다….

이것또한 Json Array 이란 형태로 되어있더군요

처음 알았습니다 배열이라니 알지 못할때는 기존에 알고 있던 파싱 방법으로 파싱을 시도 하였으니 안되는거였습니다.

해결 방법으로는

try decoder.decode([ExchangeModel].self, from: data

이렇게 decode 안에 들어갈 구조체를 배열로 감싸주면 됩니다!!!!!!

오늘은 개인적인 포스팅을 해보았습니다.

Today I Learned Rmx!

profile
프로그래머 아님

0개의 댓글