1. 이전 포스팅 확인하기

 

https://growingsaja.tistory.com/933

 

 

 

 

 

2. 목표

 

  a. Open Exchange Rates API에서 return해주는 여러 주요 국가 화폐 환율 정보를 저장하는 기능 추가

  b. 저장한 정보를 노출하는 별도 페이지 뷰 기능 추가

 

 

 

 

 

3. default.json 수정

 

    a. externalApi 대신 ratesApi로 key값 변경

      - 해당 데이터는 rates 관련 api만 다루기 때문에 용도에 맞게 key값 변수명 변경

 

    b. ratesApi로 key값 변경함에 따라 수반되는 해당 데이터 활용 소스코드 부분 변경

    c. 취급할 화폐 정보 array로 저장하는 데이터 추가 : serviceRecentRatesSetting -> paymentCurrencyList => 다양한 화폐의 최신 환율 정보 저장 및 노출 기능 추가

 

 

 

 

 

4. a, b 반영해 변수명 변경 및 소스코드 부분 변경

 

   - default.json 데이터 변경

   - DefaultLoader 소스코드 수정

 

// vim default.json




// ...





    },
    "ratesApi": {
        "OpenExchangeRates":  {
            "key": "3fj3289qu23ytuvg8o73298c2nao",
            "url": "https://openexchangerates.org/api/latest.json",
            "image": "apiOpenExchangeRates.png"
        },
        "KoreaExim": {
            "key": "r8coqu3r82tuqvopwy3489tc7wo3t8",
            "url": "https://www.koreaexim.go.kr/site/program/financial/exchangeJSON",
            "image": ""
        },
        "DunamuQuotation": {
            "key": "",
            "url": "https://quotation-api-cdn.dunamu.com/v1/forex/recent?codes=FRX.",
            "image": "apiHanaBank.png"
        }
    },
    "exchangeInfo": {
        "Binance": {
        
        
        
        
        
        
// ...

 

// vim DefaultLoader.h

@interface DefaultLoader: NSObject

@property (readwrite, strong, nonatomic) NSArray *popularList;
@property (readwrite, strong, nonatomic) NSDictionary *exchangeImage;
@property (readwrite, strong, nonatomic) NSDictionary *ratesApi;
@property (readwrite, strong, nonatomic) NSDictionary *exchangeInfo;
@property (readwrite, strong, nonatomic) NSDictionary *exchangeInfoAll;
@property (readwrite, strong, nonatomic) NSArray *exchangeList;


+(instancetype) sharedInstance;
-(void)fetchActiveExchangeInfo;

@end

 

// vim DefaultLoader.m




// ...





        // 설정 파일을 로드하는 코드를 작성하십시오.
        CRTJSONReader *tryReading = [CRTJSONReader sharedInstance];
        [tryReading tryReadJsonFile:@"default.json"];
        sharedInstance.popularList = tryReading.loadData[@"popularList"];
        sharedInstance.exchangeImage = tryReading.loadData[@"exchangeImage"];
        sharedInstance.ratesApi = tryReading.loadData[@"ratesApi"];
        sharedInstance.exchangeInfoAll = tryReading.loadData[@"exchangeInfo"];
        [sharedInstance fetchActiveExchangeInfo];
    });
    return sharedInstance;
}





// ...

 

 

 

 

 

5. b 반영해 변수명 변경 및 소스코드 부분 변경

 

// vim OpenExchangeRates.m





// ...






// 매 1시간마다 업데이트되며, 00분 00초부터 00분 30초 사이에 업데이트된 수치가 노출됨
-(void)fetchDataWithCompletion {
    // **************************************** [Start] api 콜 준비 **************************************** //
    NSDictionary *openExchangeRates = [DefaultLoader sharedInstance].ratesApi[@"OpenExchangeRates"];
    APIManager* tryApiCall = [APIManager sharedInstance];
    // **************************************** [Start] Binance 데이터 가져오기 **************************************** //
    NSString *apiURL = [openExchangeRates[@"url"] stringByAppendingString:@"?app_id="];
    apiURL = [apiURL stringByAppendingString:openExchangeRates[@"key"]];
    
    
    
    
    
    
// ...

 

// vim DunamuQuotation.m




// ...





// 매 1시간마다 업데이트되며, 00분 00초부터 00분 30초 사이에 업데이트된 수치가 노출됨
-(void)fetchDataWithCompletion {
    // **************************************** [Start] api 콜 준비 **************************************** //
    NSDictionary *dunamuQuotation = [DefaultLoader sharedInstance].ratesApi[@"DunamuQuotation"];
    APIManager* tryApiCall = [APIManager sharedInstance];
    // **************************************** [Start] Binance 데이터 가져오기 **************************************** //
    NSString *apiURL = dunamuQuotation[@"url"];
    // 1USD 당 몇KRW인지 알기 위한 url 조합
    apiURL = [apiURL stringByAppendingString:@"KRW"];
    apiURL = [apiURL stringByAppendingString:@"USD"];
    
    
    
    
    
// ...

 

// vim PopularAssetListVC




// ...




        // 환율 호가
        NSString *ratesMainInfo = ratesInfo.usdkrw;
        self.ratesLabel.text = [ratesMainInfo stringByAppendingString:ratesChangeInfo];
        // ****** rates 정보 출처 provider 이미지 설정 ****** //
        if ([ratesInfo.provider isEqual:@"하나은행"]) {
            self.ratesProviderImage.image = [UIImage imageNamed:[DefaultLoader sharedInstance].ratesApi[@"DunamuQuotation"][@"image"]];
        } else {
            self.ratesProviderImage.image = [UIImage imageNamed:[DefaultLoader sharedInstance].ratesApi[ratesInfo.provider][@"image"]];
            if ( ! [ratesInfo.provider isEqual:@"OpenExchangeRates"]) {
                // Error
                NSLog(@"[WARN] Rates Image Error!");
            }
        }
        



// ...

 

 

 

 

 

6. c를 반영해 default.json 데이터 추가 및 DefaultLoader 파일 소스 코드 수정

 

// vim default.json




// ...




    ],
    "serviceRecentRatesSetting": {
        "paymentCurrencyList": ["EUR", "JPY", "GBP", "CHF", "CAD", "AUD", "CNY", "HKD", "SEK", "NZD", "KRW", "SGD", "NOK", "MXN", "INR", "RUB", "ZAR", "TRY", "BRL", "AED", "BHD", "BND", "CNH", "CZK", "DKK", "IDR", "ILS", "MYR", "QAR", "SAR", "THB", "TWD", "CLP", "COP", "EGP", "HKD", "HUF", "KWD", "OMR", "PHP", "PLN", "PKR", "RON", "BRL", "BDT", "DZD", "ETB", "FJD", "JOD", "KES", "KHR", "KZT", "LKR", "LYD", "MMK", "MNT", "MOP", "NPR", "TZS", "UZS", "VND"]
    },
    "ratesApi": {
    



// ...

 

// vim DefaultLoader.h



// ...




@property (readwrite, strong, nonatomic) NSDictionary *serviceRecentRatesSetting;




// ...

 

// vim DefaultLoader.m





// ...





        sharedInstance.serviceRecentRatesSetting = tryReading.loadData[@"serviceRecentRatesSetting"];






// ...

 

 

 

 

 

7. c를 반영해 api의 return 결과로 다양한 통화 환율 정보 가져오기

 

// vim OpenExchangeRates.h

@interface OpenExchangeRates : NSObject

// ****** 활용하게 될 krw 관련 주요 데이터 ****** //
// 최신 정보가 업데이트된 시간
@property (readwrite, strong, nonatomic) NSString *recentUpdateDatetime;
// 최신 usdkrw 환율
@property (readwrite, strong, nonatomic) NSString *usdkrw;
// 최신 usdkrw 환율 기준 단위 - ex. USD
@property (readwrite, strong, nonatomic) NSString *paymentCurrency;
// 출처 = OpenExchangeRates
@property (readwrite, strong, nonatomic) NSString *provider;

// ****** 활용하게 될 글로벌 관련 주요 데이터 ****** //
// 최신 여러 currency 환율
@property (readwrite, strong, nonatomic) NSMutableDictionary *usdRates;

+(instancetype)sharedInstance;
-(void)fetchDataWithCompletion;

@end

 

// vim OpenExchangeRates.m






// ...





                } else {
                    // 최근 환율 업데이트 시간 변경됨 감지
                    // 최근 업데이트 시간 최신화 from api
                    self.recentUpdateDatetime = updateDatetime.stringDateTime;
                    // 최근 업데이트 환율값 최신화 (소수점 2자리까지 반올림 진행)
                    NSDictionary *ratesNow = jsonResponse[@"rates"];
                    
                    for (NSString *paymentCurrency in paymentCurrencyList) {
                        // 글로벌 환율 size에 따라 반올림해서 저장 진행
                        float usdRateFloat = [ratesNow[paymentCurrency] floatValue];
                        if (usdRateFloat >= 10000) {
                            self.usdRates[paymentCurrency] = [NSString stringWithFormat:@"%.1f", usdRateFloat];
                        } else if (usdRateFloat >= 1000) {
                            self.usdRates[paymentCurrency] = [NSString stringWithFormat:@"%.2f", usdRateFloat];
                        } else if (usdRateFloat >= 100) {
                            self.usdRates[paymentCurrency] = [NSString stringWithFormat:@"%.3f", usdRateFloat];
                        } else if (usdRateFloat >= 10) {
                            self.usdRates[paymentCurrency] = [NSString stringWithFormat:@"%.4f", usdRateFloat];
                        } else if (usdRateFloat >= 1) {
                            self.usdRates[paymentCurrency] = [NSString stringWithFormat:@"%.5f", usdRateFloat];
                        } else if (usdRateFloat >= 0.1) {
                            self.usdRates[paymentCurrency] = [NSString stringWithFormat:@"%.6f", usdRateFloat];
                        } else if (usdRateFloat >= 0.01) {
                            self.usdRates[paymentCurrency] = [NSString stringWithFormat:@"%.7f", usdRateFloat];
                        } else if (usdRateFloat >= 0.001) {
                            self.usdRates[paymentCurrency] = [NSString stringWithFormat:@"%.8f", usdRateFloat];
                        } else if (usdRateFloat >= 0.0001) {
                            self.usdRates[paymentCurrency] = [NSString stringWithFormat:@"%.9f", usdRateFloat];
                        } else {
                            self.usdRates[paymentCurrency] = [NSString stringWithFormat:@"%f", usdRateFloat];
                        }
                    }
                    // 한국 환율
                    float usdkrwFloat = [ratesNow[@"KRW"] floatValue];
                    
                    
                    



// ...

 

 

 

 

 

 

 

+ Recent posts