【问题标题】:How to bind Measurement with UI in SwiftUI?如何在 SwiftUI 中将测量与 UI 绑定?
【发布时间】:2020-06-08 09:13:35
【问题描述】:

我正在尝试创建一个简单的转换器。 有没有机会我可以将 Measurement() 与 UI 绑定。 错误说,为了绑定 Measurement in 必须是一个字符串。 先感谢您! 代码如下:

import SwiftUI
struct ContentView: View {
    @State private var tCelsius = Measurement(value: 0, unit: UnitTemperature.celsius)

    var fromCelsiusToFahrenheit: Measurement<UnitTemperature> {
        tCelsius.converted(to: .fahrenheit)
    }

    var body: some View {

        NavigationView {
            Form {
                TextField("Type the temperature", text: $tCelsius)
                Text("\(fromCelsiusToFahrenheit)")
            }

        }
    }
}

【问题讨论】:

  • 看一下MeasurementFormatter,它可以将Measurement转换为可显示的字符串

标签: swift string binding swiftui measurement


【解决方案1】:

您需要创建一个自定义Binding,将您的Measurement 转换为String

您可以通过使用MeasurementFormattertemperatureBinding 的getter 中进行转换来改进以下代码。

struct ContentView: View {
    @State private var tCelsius = Measurement(value: 0, unit: UnitTemperature.celsius)

    var fromCelsiusToFahrenheit: Measurement<UnitTemperature> {
        tCelsius.converted(to: .fahrenheit)
    }

    var body: some View {

        let temperatureBinding = Binding<String>(
            get: { self.tCelsius.description },
            set: { temperatureString in
                guard let newTemperature = Double(temperatureString) else { return }
                self.tCelsius.value = newTemperature
            }
        )

        return NavigationView {
            Form {
                TextField("Type the temperature", text: temperatureBinding)
                Text("\(fromCelsiusToFahrenheit)")
            }

        }
    }
}

【讨论】:

    【解决方案2】:

    是的,您需要像这样使用值格式化器构造函数之一;

    @State var min: Measurement<UnitMass> = Measurement(value: 0, unit: .pounds)
    
    private var massFormatter = MeasurementFormatter()
    
    var body: some View {
        TextField("Min", value: $min, 
                         formatter: massFormatter).keyboardType(.decimalPad)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-02
      • 1970-01-01
      • 2019-11-11
      • 2018-09-24
      • 1970-01-01
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多