在 TextField 初始值设定项中调用初始值设定项错误时没有完全匹配

问题描述 投票:0回答:1

试图将视图组合在一起,如下所示,但在 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()
}

enter image description here

swift swiftui
1个回答
0
投票

您要使用的

.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))
)以确保数字以所需的方式格式化。

© www.soinside.com 2019 - 2024. All rights reserved.