【问题标题】:How do I add a degree symbol as part of a UILabel in iPhone development?如何在 iPhone 开发中添加度数符号作为 UILabel 的一部分?
【发布时间】:2019-07-15 21:00:37
【问题描述】:

我已将度数符号添加到我的 UILabel,但当应用程序运行时它会消失。我正在创建一个天气应用程序,因此正确格式化它很重要。 这是加载 ViewController 后的代码。

 override func viewDidLoad() {
    super.viewDidLoad()
    cityLabel.text = city
    userEnteredNewCityName(city: city)
    // Do any additional setup after loading the view.
}

这里是更新 ViewController 的代码

func updateWeatherData(json: JSON) {
    if let tempResult = json["main"]["temp"].double {
        weatherDataModel.temperature = Int(tempResult - 273)
        weatherDataModel.city = json["name"].stringValue
        weatherDataModel.condition = json["weather"][0]["id"].intValue
        weatherDataModel.weatherIconName = weatherDataModel.updateWeathericon(condition: weatherDataModel.condition)

        updateUIWithWeatherData()
    } else {
        cityLabel.text = "No data available"
    }

}

func userEnteredNewCityName(city: String){
    let params : [String : String] = ["q" : city, "appid" : APP_ID]
    getWeatherData(url: WEATHER_URL, parameters: params)
}

 //Write the updateUIWithWeatherData method here:


func updateUIWithWeatherData() {
    cityLabel.text = weatherDataModel.city
    temperatureLabel.text = String(weatherDataModel.temperature)
    weatherIcon.image = UIImage(named: weatherDataModel.weatherIconName)
}

任何帮助将不胜感激。

【问题讨论】:

  • 请提供您设置“度”标签文本的代码部分。
  • 你应该使用MeasurementFormatter
  • 我仍然没有看到正在添加的“学位”符号。但你可以使用temperatureLabel.text = String(weatherDataModel.temperature) + "°"
  • 我在情节提要中添加了度数符号。
  • @AltBrian 这就是我的想法。这很好。但是当您设置 temperatureLabel.text = String(weatherDataModel.temperature) 时,您将覆盖之前的文本。所以你需要在字符串后面加上+ "°",就像我说的那样。

标签: swift api uilabel openweathermap


【解决方案1】:

理想情况下,使用MeasurementFormatter:

let measurement = Measurement(value: weatherDataModel.temperature, unit: UnitTemperature.celsius)

let measurementFormatter = MeasurementFormatter()
measurementFormatter.unitStyle = .short
measurementFormatter.numberFormatter.maximumFractionDigits = 0
measurementFormatter.unitOptions = .temperatureWithoutUnit

temperatureLabel.text = measurementFormatter.string(from: measurement)   

无需转换为Int。格式化程序将处理十进制数字的显示。

另外,您不必自己进行开尔文到摄氏度的转换:

let measurementInKelvin = Measurement(value: weatherDataModel.temperature, unit: UnitTemperature.kelvin)
let measurement = measurementInKelvin.converted(to: .celsius)

【讨论】:

    【解决方案2】:

    如果您在这行代码中更新临时标签:

    temperatureLabel.text = String(weatherDataModel.temperature)
    

    您只是将数字转换为字符串,覆盖之前插入标签的所有内容。如果要添加度数符号,请执行以下操作:

    temperatureLabel.text = String(weatherDataModel.temperature) + "°"
    

    现在,如果这是最简单的方法并不是更健壮,因为您没有考虑用户的 语言环境,为了更好地理解让我们说测量单位,在例如,美国他们使用华氏温度。
    如果您使用 MeasurementFormatter 或检查 here 创建字符串,这样做会更好。要获取温度单位,请检查here

        let measureFormatter = MeasurementFormatter()
        let measurement = Measurement(value: <#your_value#>, unit: UnitTemperature.celsius)
        let output = measureFormatter.string(from: measurement)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-22
      • 1970-01-01
      相关资源
      最近更新 更多