Swift 5: изменить URL-адрес для запроса REST API, показать ответ в UILabel - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь сделать запрос (GET) к REST API. Этот API возвращает отчеты о погоде в аэропорту в формате JSON.

Я пытаюсь достичь следующего: пользователь вводит идентификационный код аэропорта, который изменяется в URL-адрес. Когда он / она нажимает кнопку «Запрос», к API выполняется запрос GET, который затем отображает результат в UILabel.

Я дошел до того, что смог выполнить вызов с помощью кнопки, и ответ сервера печатается в консоли, но я не могу распечатать его в UILabel.

Это мой код:

//
//  ViewController.swift
//  urltest
//
//  Created by Stefan Oomen on 06/05/2020.
//  Copyright © 2020 FlyTechSoft. All rights reserved.
//

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var metarResponse: UITextView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }


    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    }
    */
    @IBAction func onButtonClick(_ sender: UIButton) {

        let url = URL(string: "hhttps://website.rest/api/metar/location?options=&airport=true&reporting=true&format=json&onfail=cache")!
        var request = URLRequest(url: url)
        request.addValue("My_API_KEY", forHTTPHeaderField: "Authorization")

        let task = URLSession.shared.dataTask(with: request) { data, response, error in
          if let response = response {
            print(response)

            if let data = data, let body = String(data: data, encoding: .utf8) {
              print(body)
            }
          } else {
            print(error ?? "Unknown error")
          }
        }

        task.resume()
    }

}

В URL-адресе GET мне нужно только изменить «Местоположение?» часть, используя ввод от пользователя из 'icaoTextField' UITextField:

https://website.rest/api/metar/location?options=&airport=true&reporting=true&format=json&onfail=cache

Я новичок в этом, поэтому вся помощь приветствуется. Спасибо! PS. Небольшой подвопрос: можно ли выбрать и использовать только определенные c части результата вызова REST API?

1 Ответ

0 голосов
/ 06 мая 2020

Функция metarResponse, которая устанавливает текстовое значение UILabel, никогда нигде не вызывается.

Попробуйте заменить -

func metarResponse() {
  self.metarresponse.text = response as? String
}

на -

self.metarresponse.text = response ?? "Something went wrong"

можно ли выбрать и использовать только указанные c части результата вызова REST API?

Конечно. Вам нужно проанализировать результат и извлечь нужные пары ключ-значение. Ответы API обычно находятся в JSON fromat, и вы можете в значительной степени извлечь из него любое значение, если знаете, как l oop через и получить доступ к элементам массива / словаря.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...