我正在尝试从用户当前位置检索温度。
我正在使用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 :(得分: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 :(得分:2)
从上面的代码可以看出,在你得到温度之后,正确的地方就是这样
if let temperatureInKelvin = main["temp"] as? Double {
let temperatureInCelsius = temperatureInKelvin - 273.15
self.tempLabel.text = String(format: "%.0f", temperature)
}
将来,我可能会在单独的类中解析您的JSON值,并将它们存储在您稍后可以调用的模型对象中。
答案 2 :(得分: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)
}
答案 3 :(得分:1)
对于Swift 4.2 :
使用度量格式器。
let mf = MeasurementFormatter()
此方法将一种温度类型(开尔文,摄氏,华氏温度)转换为另一种:
func convertTemp(temp: Double, from inputTempType: UnitTemperature, to outputTempType: UnitTemperature) -> String {
mf.numberFormatter.maximumFractionDigits = 0
mf.unitOptions = .providedUnit
let input = Measurement(value: temp, unit: inputTempType)
let output = input.converted(to: outputTempType)
return mf.string(from: output)
}
用法:
let temperature = 291.0
let celsius = convertTemp(temp: temperature, from: .kelvin, to: .celsius) // 18°C
let fahrenheit = convertTemp(temp: temperature, from: .kelvin, to: .fahrenheit) // 64°F
要输出局部温度格式,请删除行mf.unitOptions = .providedUnit
答案 4 :(得分:0)
上述便捷函数的一个简单示例(针对 Swift 5.3 进行了更新)如下所示:
func convertTemperature(temp: Double, from inputTempType: UnitTemperature, to outputTempType: UnitTemperature) -> Double {
let input = Measurement(value: temp, unit: inputTempType)
let output = input.converted(to: outputTempType)
return output.value
}