#ios #swift #urlsession
#iOS #быстрый #urlsession urlsession
Вопрос:
У меня есть два http-адреса. Первый позволяет мне загрузить весь список с помощью /findAll , но во втором нет этого запроса. Это позволяет загружать только выбранную станцию по идентификатору первого адреса /{StationID}. Таким образом, я могу загрузить только одну станцию в одном запросе. Как загрузить весь список второго адреса по URLSession? Цикл?
Адреса: Сначала:
http://api.gios.gov.pl/pjp-api/rest/station/findAll
Второй:
http://api.gios.gov.pl/pjp-api/rest/station/sensors/{stationId}
Невозможно использовать запрос /findAll во втором.
Первый (Станции):
func fetchStations(url: URL) -> Observable<[Station]> {
return Observable.create { observer -> Disposable in
let task = URLSession.shared.dataTask(with: url)
{ data, _, _ in
guard let data = data else {
observer.onError(NSError(domain: "", code: -1, userInfo: nil))
return
}
do {
let stations = try JSONDecoder().decode([Station].self, from: data)
observer.onNext(stations)
} catch {
observer.onError(error)
}
}
task.resume()
return Disposables.create {
task.cancel()
}
}
}
Второй (датчики):
func fetchSensors(url: URL) -> Observable<[Sensor]> {
return Observable.create { observer -> Disposable in
let task = URLSession.shared.dataTask(with: url)
{ data, _, _ in
guard let data = data else {
observer.onError(NSError(domain: "", code: -1, userInfo: nil))
return
}
do {
let sensors = try JSONDecoder().decode([Sensor].self, from: data)
observer.onNext(sensors)
print("API SERVICE: (sensors)")
} catch {
observer.onError(error)
}
}
task.resume()
return Disposables.create {
task.cancel()
}
}
}
Ответ №1:
Для вашей второй функции потребуется ввод stationID
, а затем создайте свой окончательный URL-адрес внутри функции baseURL "sensors/" stationID
.
Убедитесь, что ваш объект обладает всеми необходимыми свойствами из документации API
Комментарии:
1. Я знаю. И это проблема, потому что мне нужен весь список датчиков. Один запрос выдает мне только датчики под станцией. Например, только один или два. Мне нужны все датчики для всех станций. Можно загрузить все станции с помощью запроса / findAll, но невозможно выполнить такой же запрос для датчиков.
2. Ах, тогда вам нужно будет создать цикл для станций, чтобы получать все датчики один за другим