SwiftUI TextField 不接受整数/双精度。怎么做?

Posted

技术标签:

【中文标题】SwiftUI TextField 不接受整数/双精度。怎么做?【英文标题】:SwiftUI TextField does not accept integers/double. How to do so? 【发布时间】:2020-05-11 10:38:41 【问题描述】:

我从 ios 应用开发开始,SwiftUI 是我的第一步。

我无法输入来自用户的整数或双精度值。

@State public var num1: Double = 0
TextField(" Enter a Number", text: $num1)
//Error: Cannot convert value of type 'Binding<Double>' to expected argument type 'Binding<String>'

请帮忙!

【问题讨论】:

这能回答你的问题吗? Use Binding<Int> with a TextField SwiftUI 【参考方案1】:

SwiftUI 的组件期望有两种方式绑定到属性,使用类似@State 的东西,你在声明 num1 属性之前使用过 @State 吗?

你可以这样做:

将变量 num1 声明为

@State private var num1 = ""

你的TextField不能直接接受Integer或Double输入,你必须只接受String输入,并且可以在评估期间Typecast所需的值,如

print("Input taken is : \(Double(num1))")

【讨论】:

感谢您的回复!我已经在我的代码中应用了 State var。错误一直存在。 见 Praduyt ... 将 num1 类型设为 String,然后尝试编译 当然可以,因为它只接受字符串值。我使用 Double 的目的是进行 String 变量无法实现的算术运算。 您是否尝试过 TextField 的格式化程序参数,您必须将 DoubleFormatter() 作为 TextField 的格式化程序参数传递! 我也尝试了格式化程序参数,错误显示“调用中的额外参数'格式化程序'”。我刚刚尝试了 DoubleFormatter() 并且没有任何内容。【参考方案2】:

实际上他们可以接受数字。只需为 TextField 尝试不同的初始化程序

TextField("placeholder", value: $yourValue, formatter: NumberFormatter())

【讨论】:

以上是关于SwiftUI TextField 不接受整数/双精度。怎么做?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建只接受数字和单个点的 SwiftUI TextField?

为啥导航栏中的 SwiftUI TextField 一次只接受输入一个字符

如何将可观察对象发布的整数变量绑定到 SwiftUI 中的 textField?

SwiftUI TextField 绑定到 Double 不使用自定义格式化程序

SwiftUI - 在 ForEach 中获取 TextField 数组

如何使用maskRe限制ExtJs Textfield仅接受数字。 (应接受正数,负数,整数和十进制数。)