试图将视图组合在一起,如下所示,但在 No exact matches in call to initializer
行上出现
TextField
错误。我怀疑这是由于格式参数造成的,但不知道如何修复它。 Xcode 提示也不是很有帮助(见下图)。然后单击“显示”什么也没有显示。
如果我删除
where
子句(我添加了该子句以尝试修复它),也会出现同样的错误。
我怀疑该错误是因为编译器无法找出
format
参数,该参数带来了无法看到/推断/等的要求? 文档这里。
有什么建议如何解决这个问题/正确的方法是什么?
import SwiftUI
struct SliderView<T>: View where T: FloatingPoint {
let key: String
@Binding var boundValue: T
var body: some View {
ZStack {
Text(key)
.opacity(0)
TextField(key, value: $boundValue, format: .number)
}.background(.teal)
}
}
struct MyView: View {
@State private var x: Double = 0
var body: some View {
Group {
Text("x is \(x, specifier: "%.2f")")
SliderView(key: "Key Text", boundValue: $x)
}.padding()
}
}
#Preview {
MyView()
}
您要使用的
.number
格式样式在 FloatingPointFormatStyle<Value>
中声明,这要求 Value
是 BinaryFloatingPoint
。
所以你应该写
where T: BinaryFloatingPoint
,而不是where T: FloatingPoint
。
但是
number
的声明只有3个。一张用于 FloatingPointFormatStyle<Double>
,一张用于 FloatingPointFormatStyle<Float>
,一张用于 FloatingPointFormatStyle<Float16>
。所以你不能以这种通用的方式使用 .number
。
你可以直接创建一个
FloatingPointFormatStyle
:
TextField(key, value: $boundValue, format: FloatingPointFormatStyle<T>())
我认为创建摇摆的格式样式的格式化行为与
.number
/Double
/Float
的 Float16
相同。我建议添加其他修饰符(例如 .precision(.significantDigits(1...6))
)以确保数字以所需的方式格式化。