SwiftUI中TextField初始化报错:No exact matches in call to initializer
解决SwiftUI TextField "No exact matches in call to initializer" 错误
问题原因
你的泛型约束使用了FloatingPoint协议,但SwiftUI的TextField(value:format:)初始化器要求绑定值的类型遵循**BinaryFloatingPoint**协议——默认的.number格式样式只适配这类类型(比如Double、Float),而FloatingPoint还包含Decimal这类不兼容该格式的类型,导致编译器无法匹配到正确的初始化器。
修复方案
直接将泛型约束改为BinaryFloatingPoint即可解决问题,修改后的完整代码如下:
import SwiftUI struct SliderView<T>: View where T: BinaryFloatingPoint { 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() }
可选优化
如果需要自定义数字显示格式(比如固定小数位数),可以调整format参数:
TextField(key, value: $boundValue, format: .number.precision(.fractionLength(2)))
内容的提问来源于stack exchange,提问作者g i i k
相关产品推荐
相关产品推荐

