如何在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)