ios - (Swift) API 调用第一次没有通过,第二次尝试调用第一次点击
问题描述
我是一个应用程序,假设要获取某些城市的天气数据,并且我有一个下拉列表,并且基于下拉选择,当我第一次点击一个城市时,应该调用一个 api(基于城市名称)应用程序运行它返回 nil,如果我点击另一个城市,它会根据第一次选择返回数据,我已经逐行调试和跟踪代码,但是 URL 是正确的,一切似乎都井井有条,有什么帮助吗?这是我的代码:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var tempraturevalue: UILabel!
@IBOutlet weak var cityname: UILabel!
@IBOutlet weak var temprature: UIImageView!
@IBOutlet var cityButtons: [UIButton]!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func handleSelection(_ sender: UIButton) {
cityButtons.forEach{ (button) in
UIView.animate(withDuration: 0.3) {
button.isHidden = !button.isHidden
self.view.layoutIfNeeded()
}
}
}
enum Cities:String {
case amman = "Amman"
case azzerqa = "Az zerqa"
case irbid = "Irbid"
case aqaba = "Aqaba"
}
var tempraturevalueData:Double = 0.0
var cityNameData:String = ""
@IBAction func cityTapped(_ sender: UIButton) {
guard let title = sender.currentTitle, let City = Cities(rawValue: title)
else {
return
}
var city:String
switch City {
case .amman:
city = "Amman"
case .azzerqa:
city = "zerqa"
case .irbid:
city = "Irbid"
case .aqaba:
city = "Aqaba"
}
let url = URL(string: "https://api.weatherapi.com/v1/current.json?key={key}&q=\(city)")
guard url != nil else {
print("error creating URL Object")
return
}
var request = URLRequest(url: url!, cachePolicy: .useProtocolCachePolicy , timeoutInterval: 10)
let headers = ["Content-Type" : "application/json"]
request.allHTTPHeaderFields = headers
request.httpMethod = "GET"
let session = URLSession.shared
let dataTask = session.dataTask(with: request, completionHandler: {(data, response, error) in
if error == nil && data != nil {
do {
let decoder = JSONDecoder()
do {
let weatherdatadecoded = try decoder.decode(WeatherData.self, from: data!)
self.tempraturevalueData = weatherdatadecoded.current?.temp_c ?? 0.1
self.cityNameData = weatherdatadecoded.location?.name ?? "no city found"
}
catch {
print(error)
}
}
catch {
print(error.localizedDescription)
}
}
})
dataTask.resume()
print(self.cityNameData)
print(self.tempraturevalueData)
}
}
解决方案
推荐阅读
- c++ - 在 .cc 文件中找不到 iostream
- ios - 无法使用 xcodebuild 执行单元测试用例。它随机失败
- ios - 可以将 GIF 快速添加到标签栏项目吗
- azure-cosmosdb - Cosmos DB 中的更改数据捕获
- javascript - CSS nth-child 选择器不适用于 JS 创建的表
- swift - 如何在swift 5中的谷歌地图中设置标记标题文本大小
- java - 为什么在我的 Game.java 类中无法识别我的 windows 实例?
- r - 如何在情节中设置显示空间
- r - 如何在 C 中获取 R 的变量名(在 C 中替换)?
- javascript - 抓取动态创建的 XHR URL