首页 > 解决方案 > (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)
    }

}

标签: iosswiftxcode

解决方案


推荐阅读