【问题标题】:Swift 5: change url for REST API query, show response in UILabelSwift 5:更改 REST API 查询的 url,在 UILabel 中显示响应
【发布时间】:2020-05-06 10:11:45
【问题描述】:

我正在尝试向 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 调用结果的特定部分?

【问题讨论】:

标签: ios swift rest get


【解决方案1】:

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

尝试替换 -

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

与 -

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

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

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

【讨论】:

  • 嗨 Animesh,我再次深入研究了我的代码,最后开始编写我使用情节提要创建的按钮,以便在点击时执行 API GET 调用。现在我需要从响应中提取一些部分(因为整个 JSON 响应非常大),并且只是在许多不同的 UILabel 中的部分。我已经用我的新代码在顶部编辑了我的问题。我很抱歉提出愚蠢的问题,只是一个试图学习 Swift 的爱好者:)
猜你喜欢
  • 1970-01-01
  • 2021-09-01
  • 2017-05-19
  • 2020-05-21
  • 1970-01-01
  • 2019-01-12
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多