Ограничить запрос API в списке

#swift #api #rest #fetch #call

Вопрос:

У меня есть приложение, в котором я выполняю вызов API, который позволяет мне получать валюты с веб-сайта. Он представляет все валюты, однако мне нужно ограничить их только 3 «долларами США», «тенге», «дирхамами ОАЭ», «рублями».

Мой код для извлечения приведен ниже:

 import SwiftUI

class FetchData: ObservableObject {

@Published var coversionData: [Currency] = []
@Published var baseCode = "USD"

 init() {
        fetch()
    }
    
func fetch() {
    
    let url = "https://open.exchangerate-api.com/v6/latest?base=(baseCode)"
    
    let session = URLSession(configuration: .default)
    session.dataTask(with: URL(string: url)!) { data, _, _ in
        
        guard let JSONData = data else {return}
        
        do {
            let conversion = try JSONDecoder().decode(Conversion.self, from: JSONData)
            
            DispatchQueue.main.async {
                self.coversionData = conversion.rates.compactMap({ (key,value) -> Currency? in
                    return Currency(currencyName: key, currencyValue: value)
                })
            }
        }
        catch {
            print(error)
        }
    }
    .resume()
}

func updateData(baseCode: String) {
    
    self.baseCode = baseCode
    
    self.coversionData.removeAll()
    fetch()
    
}
}
 

Может ли кто-нибудь поделиться с моей документацией, учебником, ссылкой на GitHub чем-нибудь, что мне просто нужно понять, как показывать только 3 категории?

Или пример, пожалуйста!

Комментарии:

1. Разве вы не можете просто вызвать другую конечную точку api для каждой нужной вам валюты и сохранить их после этого в массиве ? Или, например, после вашего звонка сюда отфильтруйте результаты, чтобы сохранить только те валюты, которые вы хотите ? Я не понимаю, в чем твоя проблема

2. Всегда начинайте с документации exchangerate-api.com/docs/pair-conversion-requests

3. @AdrienRoux Большое вам спасибо за ваш ответ, я новичок в кодировании и API 🙂 надеюсь, однажды я помогу, как и вы, другим людям!

4. @loremipsum большое вам спасибо за вашу помощь, я обязательно пройду через это.

5. @NursultanYelemessov Без проблем ! Не знал, что ты новичок, надеюсь, ты найдешь свой путь через API 🙂 Рад немного помочь 🙂

Ответ №1:

      //Properties
     @Published var filteredCurrency = "KZT"


 //.Filter call
.filter({ Currency in
                        Currency.currencyName == self.filteredCurrency
                    })
 

Это был ответ, потому что я думаю, что я вызвал .фильтр и установил, что имя валюты.имя валюты будет равно свойству, которое я ему дал

теперь мой код выглядит так

     import SwiftUI

class FetchData: ObservableObject {
    
    @Published var coversionData: [Currency] = []
    @Published var baseCode = "USD"
    @Published var filteredCurrency = "KZT"
    
init() {
    fetch()
}

func fetch() {
    
    let url = "https://open.exchangerate-api.com/v6/latest?base=(baseCode)"
    
    let session = URLSession(configuration: .default)
    session.dataTask(with: URL(string: url)!) { data, _, _ in
        
        guard let JSONData = data else {return}
        
        do {
            let conversion = try JSONDecoder().decode(Conversion.self, from: JSONData)
            
            DispatchQueue.main.async {
                self.coversionData = conversion.rates.compactMap({ (key,value) -> Currency? in
                    return Currency(currencyName: key, currencyValue: value)
                })
                .filter({ Currency in
                    Currency.currencyName == self.filteredCurrency
                })
            }
        }
        catch {
            print(error)
        }
    }
    .resume()
}

func updateData(baseCode: String) {
    
    self.baseCode = baseCode
    


       self.coversionData.removeAll()
        fetch()
        
    }
    
}