ios - 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 调用结果的特定部分?
解决方案
metarResponse
设置 UILabel 文本值的函数永远不会在任何地方被调用。
尝试更换 -
func metarResponse() {
self.metarresponse.text = response as? String
}
和 -
self.metarresponse.text = response ?? "Something went wrong"
是否可以仅选择和使用 REST API 调用结果的特定部分?
当然。您需要解析结果并提取所需的键值对。API 响应通常在 JSON fromat 中,如果您知道如何循环访问和访问数组/字典的元素,您几乎可以从中提取任何值。
推荐阅读
- c - 页面对齐分配中的零大小堆内存
- ruby - 使用两个同名的 Ruby 类
- node.js - 条目描述符语法无效配置
- laravel - Laravel 文件上传“Laminas\Diactoros\Exception\InvalidArgumentException”
- ffmpeg - 使用 ffmpeg 连接 *.mkv 文件
- android - 有没有办法在android studio中使用对角线制作可绘制或自定义视图?
- css - 剪辑路径属性与元素重叠,并且 z-index 不起作用。我怎样才能让它停止?
- javascript - 如何使用 jQuery 填充表格?
- vba - Form的长度如何延长?
- swift - 如何从任何图像中获取所有元数据?