在 Swift 内将开尔文转换为摄氏度
Convert Kelvin into Celsius in Swift
我正在尝试从用户当前位置检索温度。
我正在使用来自 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)
}
}
}
谁能帮我解决这个问题,因为我真的不知道从哪里开始,谢谢。
如果您需要查看我的更多代码,请告诉我。
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)
从上面的代码来看,在我看来,正确的位置是在你获得温度之后
if let temperatureInKelvin = main["temp"] as? Double {
let temperatureInCelsius = temperatureInKelvin - 273.15
self.tempLabel.text = String(format: "%.0f", temperature)
}
但在未来,我可能会在单独的 class 中解析您的 JSON 值,并将它们存储在您稍后可以调用的模型对象中。
这里:
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)
}
对于Swift4.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
上述便捷函数的一个更简单的示例(针对 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
}
我正在尝试从用户当前位置检索温度。
我正在使用来自 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)
}
}
}
谁能帮我解决这个问题,因为我真的不知道从哪里开始,谢谢。
如果您需要查看我的更多代码,请告诉我。
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)
从上面的代码来看,在我看来,正确的位置是在你获得温度之后
if let temperatureInKelvin = main["temp"] as? Double {
let temperatureInCelsius = temperatureInKelvin - 273.15
self.tempLabel.text = String(format: "%.0f", temperature)
}
但在未来,我可能会在单独的 class 中解析您的 JSON 值,并将它们存储在您稍后可以调用的模型对象中。
这里:
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)
}
对于Swift4.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
上述便捷函数的一个更简单的示例(针对 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
}