2016-07-05 5 views
1

私はユーザーの現在地から気温を取得しようとしています。スウェーデンのケルビンを摂氏に変換する

OpenWeatherMapのAPIを使用しています。問題は、デフォルトとしてケルビンの温度を提供することです。摂氏で気に入っています。

私はケルビンの値から273.15を引くだけでよいことを理解しています....?しかし、私はどこでそれを行うのか把握するのに苦労しています。

私のラベルを設定するための私のコード:

var jsonData: AnyObject? 

func setLabels(weatherData: NSData) { 

    do { 

     self.jsonData = try NSJSONSerialization.JSONObjectWithData(weatherData, options: []) as! NSDictionary 

    } catch { 
     //handle error here 

    } 

    if let name = jsonData!["name"] as? String { 

     locationLabel.text = "using your current location, \(name)" 

    } 

    if let main = jsonData!["main"] as? NSDictionary { 
     if let temperature = main["temp"] as? Double { 

      self.tempLabel.text = String(format: "%.0f", temperature) 

     } 

    } 

} 

誰もが、私は本当にどこから始めればわからないように私は、この権利をして下さい得るのを助けることができ、感謝します。

私のコードをもっと見る必要があるかどうか教えてください。

+0

- iOSの10/MacOSのシエラ、アップルのようあなたのための変換とローカリゼーションを処理するMeasurements and Units APIをFoundationに導入しました。ドキュメントへのリンク:https://developer.apple.com/reference/foundation/nsmeasurementと無料のWWDCビデオ:https://developer.apple.com/videos/play/wwdc2016/238/ –

答えて

7
if let kelvinTemp = main["temp"] as? Double { 
    let celsiusTemp = kelvinTemp - 273.15 
    self.tempLabel.text = String(format: "%.0f", celsiusTemp) 
} 

または単に

self.tempLabel.text = String(format: "%.0f", temperature - 273.15) 
1

上記のコードから、しかし、あなたが将来的には、温度

if let temperatureInKelvin = main["temp"] as? Double { 
    let temperatureInCelsius = temperatureInKelvin - 273.15 
    self.tempLabel.text = String(format: "%.0f", temperature) 
} 

を取得した後、これを行うための適切な場所は右のだろう私には思えますおそらく別のクラスでJSON値を解析し、後で呼び出せるモデルオブジェクトにJSON値を格納することになるでしょう。ここで

1

self.tempLabel.text = String(format: "%.0f", temperature - 273.15) 

か(私はよくスウィフトを知らないとして擬似構文を)あなたはここでそれを行うことができます。

FYI
if let temperature = (main["temp"] as? Double) - 273.15 { 
    self.tempLabel.text = String(format: "%.0f", temperature) 
} 
関連する問題