#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()
}
}