首页 > 解决方案 > Swift 5:更改 REST API 查询的 url,在 UILabel 中显示响应

问题描述

我正在尝试向 REST API 发出请求 (GET)。此 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()
    }

}

在 GET URL 中,我只需要更改“位置?” 部分,使用来自“icaoTextField”UITextField 的用户输入:

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

我对此很陌生,所以非常欢迎所有帮助。谢谢!PS。小问题:是否可以仅选择和使用 REST API 调用结果的特定部分?

标签: iosswiftrestget

解决方案


metarResponse设置 UILabel 文本值的函数永远不会在任何地方被调用。

尝试更换 -

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

和 -

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

是否可以仅选择和使用 REST API 调用结果的特定部分?

当然。您需要解析结果并提取所需的键值对。API 响应通常在 JSON fromat 中,如果您知道如何循环访问和访问数组/字典的元素,您几乎可以从中提取任何值。


推荐阅读