我有一个对由SwiftUI TextField设置的Double参数的绑定。我使用了一个自定义格式化程序,它可以与Double值相互转换。 TextField在编辑时将一个空字符串“”发送给Formatter,因此转换失败并且Double参数不会更新。从具有@ObjectBinding参数的父视图调用该结构,而Double是该对象的参数。
我当前正在使用Xcode 11 beta 3和macOS Catalina Beta3。如果参数为String,则TextField可以工作。问题似乎是需要格式化程序的非字符串类型无法正确更新@Binding值。
这是格式化程序:
"builderForLinux": "electron-packager --out Linux64 --overwrite --platform linux --appname clientsettings . --icon=./xyz.png --executable-name ClientSettings --asar.unpackDir=node_modules/regedit"
这是在文本字段中采用Double参数的SwiftUI视图
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), let objok = obj {
objok.pointee = dbl as AnyObject?
retVal = true
} else {
retVal = false
}
return retVal
}
}
我希望输入时更新TextField值,但不会更新。当我在格式化程序中跟踪值时。提供给getObjectValue的字符串是“”,而不是TextField中的值。
答案 0 :(得分:2)
我相信这是SwiftUI中的错误。 (请参阅我的类似问题:SwiftUI TextField with formatter not working?)
在beta 2中,它根本不起作用。在beta 3中,我认为当(且仅当)在该字段中键入内容后按回车键时,您的结果才会传递给格式化程序。希望他们能在Beta 4中完成该错误的修复!