You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中由@Binding String创建的Binding<Double>无法更新UI问题求助

问题:自定义Binding<Double?>绑定UIKit TextField后收起键盘值消失

现有代码

视图初始化器与属性

我通过以下初始化器传入Binding<String>:

let placeholderString: String
let imageName: String
let keyboardType: UIKeyboardType
let fieldType: DataFieldType
@Binding var fieldName: String // 此处的变量
private var isFocused: FocusState<Bool>.Binding
@State private var frame = CGRect.zero

init(placeholderString: String, imageName: String, keyboardType: UIKeyboardType, fieldType: DataFieldType, fieldName: Binding<String>, focusState: FocusState<Bool>.Binding) {
    self.placeholderString = placeholderString
    self.imageName = imageName
    self.keyboardType = keyboardType
    self.fieldType = fieldType
    self._fieldName = fieldName // 此处的变量
    self.isFocused = focusState
}

将这个String类型的Binding用于SwiftUI原生TextField时功能正常。

自定义Double?绑定

我创建了一个生成Binding<Double?>的自定义绑定,代码如下:

private var doubleBinding: Binding<Double?> {
    get {
        guard let binding = Double(fieldName) else { return .constant(nil) }
        return .constant(binding)
    }
    set {
        guard let double = newValue.wrappedValue else { return }
        fieldName = String(double)
    }
}

我将此绑定用于一个基于UIKit构建的、初始化器接收Binding<Double>的自定义TextField。

问题现象

每当收起键盘时,输入的值就会消失,文本框中保留的是视图首次出现时加载的初始值:
输入值消失演示

排查情况

我尝试传入基于@State Double的绑定,功能完全正常,因此可以确定问题出在上述自定义绑定的实现上,希望能得到解决思路。

内容的提问来源于stack exchange,提问作者Francojamesfan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:40:23