小编G J*_*G J的帖子

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

我有一个绑定到由SwiftUI TextField设置的Double参数。我使用了一个自定义格式化程序,它可以与Double值相互转换。TextField在编辑时将一个空字符串“”发送给Formatter,因此转换失败并且Double参数不会更新。从具有@ObjectBinding参数的父视图调用该结构,而Double是该对象的参数。

我当前正在使用Xcode 11 beta 3和macOS Catalina Beta3。如果参数为String,则TextField可以工作。问题似乎是需要格式化程序的非字符串类型无法正确更新@Binding值。
这是格式化程序:

public class DoubleFormatter: Formatter {

    override public func string(for obj: Any?) -> String? {
        var retVal: String?
        let formatter = NumberFormatter()
        formatter.numberStyle = .decimal

        if let dbl = obj as? Double {
            retVal = formatter.string(from: NSNumber(value: dbl))
        } else {
            retVal = nil
        }

        return retVal
    }

    override public func getObjectValue(_ obj: AutoreleasingUnsafeMutablePointer<AnyObject?>?, for string: String, errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>?) -> Bool {

        var retVal = true

        if let dbl = Double(string), …
Run Code Online (Sandbox Code Playgroud)

swiftui

8
推荐指数
1
解决办法
1755
查看次数

标签 统计

swiftui ×1