2017-07-07 66 views
0

我試圖運行一個應用程序,允許您使用搜索欄,它將返回只是臨時,城市和條件。當我運行它時,我得到了一個無返回值的temp和'Code:401 API無效'錯誤。但是,我試過的兩個代碼都應該工作。我可能試圖從OpenWeather獲取錯誤的數據,但我似乎無法找到在哪裏或如何解決它 - 沒有其他錯誤出現。Swift3:Openweather API返回零和API錯誤

我想結合這個主題的兩個教程/指南,但一個使用不同的API &另一個是在Swift2中。

謝謝!

import UIKit 

class ViewController: UIViewController, UISearchBarDelegate { 


    @IBOutlet weak var citySearchBar: UISearchBar! 
    @IBOutlet weak var cityLabel: UILabel! 
    @IBOutlet weak var conditionLabel: UILabel! 
    @IBOutlet weak var tempLabel: UILabel! 

    var temp: Int! 
    var condition: String! 
    var city: String! 
    let apiID:String = "d7817e07565a0019c5e7851a59eeca73" 

    var exists: Bool = true 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     citySearchBar.delegate = self 
    } 

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 

     let urlRequest = URLRequest(url: URL(string: "http://api.openweathermap.org/data/2.5/weather?q=\(citySearchBar.text!.replacingOccurrences(of: " ", with: "_"))&appid=\(apiID))")!) 

     let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in 

      if error == nil { 
       do { 

        let weatherData = try JSONSerialization.jsonObject(
         with: data!, 
         options: .mutableContainers) as! [String : AnyObject] 

        let weather = weatherData 

        DispatchQueue.main.async { 

         self.cityLabel.text = self.city 
         self.tempLabel.text = "\((self.temp))°" 
         self.conditionLabel.text = weather.description 
         } 

       } catch let jsonError { 
        print(jsonError.localizedDescription) 
       } } } 

     task.resume() 
    } } 

回答

1

所有的價值首先爲tempDouble不是所有的Int

var temp = 0.0 

第二你不要在代碼中設置temp。爲temp值是在字典中mainweatherData

if let main = weatherData["main"] as? [String:Any], 
    let tempValue = main["temp"] as? Double { 
     self.temp = tempValue 
     print(tempValue) 
} 
+0

啊謝謝。我認爲它已經在weatherData中設置了。很高興知道。 –

+0

一如既往,請閱讀JSON輸出。這很容易。 '[]'表示數組,'{}'表示字典 – vadian