2016-07-05 5 views
1

Я пытаюсь получить температуру от текущего местоположения пользователей.Преобразование Kelvin в Цельсий в Swift

Я использую API из OpenWeatherMap. Проблема в том, что они обеспечивают температуру в Кельвине по умолчанию, и я бы хотел, чтобы она была в градусах Цельсия.

Я понимаю, что мне просто нужно вычесть 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

FYI - Как ИО 10/MacOS Sierra, Apple ввел API измерений и единиц в Фонд, который обрабатывает конверсии для вас, а также локализацию. Ссылка на документацию: 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 в отдельном классе и сохранил их в объекте модели, который вы можете назвать позже.

1

Здесь:

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

или вы можете сделать это здесь (псевдо синтаксис, как я не знаю, что Swift хорошо):

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