使用从@Binding变量X创建的Bindingtype< Double>:字符串不更新UI SwiftUI

huus2vyu  于 2022-10-31  发布在  Swift
关注(0)|答案(1)|浏览(121)

我使用初始化器传入一个绑定,如下所示:

let placeholderString: String
let imageName: String
let keyboardType: UIKeyboardType
let fieldType: DataFieldType
@Binding var fieldName: String // This var here.
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 // This var here.
    self.isFocused = focusState
}

我在文本字段上使用String绑定,它工作正常。
我创建了一个自定义绑定,它会生成一个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中内置的自定义文本字段一起使用,UIKit在其初始化程序中接受Binding Double。
我的问题是,每当我关闭键盘时,我输入的值就会消失,而我只剩下视图第一次出现时文本字段中最初加载的内容。
我试过从@State Double传递绑定,它似乎工作正常,所以我想这一定是我设置自定义绑定的方式有问题。任何帮助都将不胜感激。谢谢!

3bygqnnd

3bygqnnd1#

不得不使用此语法。

private var doubleBinding: Binding<Double?> { Binding(

    get: {
        guard let binding = Double(fieldName) else { return nil }
        return binding
    },
    set: {
        fieldName = String($0!)
    })
}

不知道为什么其他语法不工作。如果有人有一些信息,为什么这工程和其他没有请发表评论。

相关问题