如何在SwiftUI中使用BindingConverble?

如何在SwiftUI中使用BindingConverble?,swiftui,Swiftui,当核心数据创建一个NSManagedObject子类时,它会将字符串属性转换为类似@NSManaged public var name:String?(已编辑) 但是,当尝试在SwiftUI文本字段中使用名称时,您会遇到一个问题: @Binding var entry: Entry TextField($entry.name) 无法生成,出现以下错误: “Binding”不能转换为“Binding” 因此,我尝试使用BindingConvertible修复错误: extension Optio

当核心数据创建一个
NSManagedObject子类时,它会将字符串属性转换为类似
@NSManaged public var name:String?
(已编辑)

但是,当尝试在SwiftUI文本字段中使用
名称时,您会遇到一个问题:

@Binding var entry: Entry
TextField($entry.name)
无法生成,出现以下错误:

“Binding”不能转换为“Binding

因此,我尝试使用
BindingConvertible
修复错误:

extension Optional: BindingConvertible where Wrapped == String {
    public var binding: Binding<String> {
        let boundVal = Binding(getValue: , setValue: )
        return boundVal
}
扩展名可选:BindingConvertible,其中Wrapped==String{
公共变量绑定:绑定{
让boundVal=Binding(getValue:,setValue:)
返回边界
}
但我不确定在初始化器的
getValue:,setValue:
部分中放什么,在文档或其他地方找不到任何答案


理想情况下,如果未包装的字符串为零,则绑定将接收空字符串,否则它将接收值。对于设置,如果字段的值为空字符串,
name
应保持为零,否则其未包装的值应为TextField的内容。关于如何进行此操作,有什么想法吗?

您说过“它将
String
属性转换为类似
@NSManaged public var name:String
”,但根据错误,它将转换为
@NSManaged public var name:String?

如果不想在数据模型中关闭
名称
的“可选”设置,则可以向
条目
添加非可选访问器,如下所示:

extension Entry {
    var nameNonOptional: String {
        get { name ?? "" }
        set { name = newValue.isEmpty ? nil : newValue }
    }
}
然后可以绑定到新的访问器:

TextField($entry.nameNonOptional)