我熟悉SwiftUI中绑定到可选属性,但是如何绑定到可选值的property呢?在下面的例子中,cat
是可选的,但cat.name
不是可选的.我该如何使用cat.name
?
import SwiftUI
class Cat {
var name: String = ""
init(name: String) {
self.name = name
}
}
class CatManager: ObservableObject {
var cat: Cat? = Cat(name: "Jiji")
}
struct TestOptional: View {
@ObservedObject var catManager: CatManager
var body: some View {
// Value of optional type 'Cat?' must be unwrapped to refer to member 'name' of wrapped base type 'Cat'
TextField("Cat's name", text: $catManager.cat.name)
// Value of optional type 'Binding<String?>?' must be unwrapped to a value of type 'Binding<String?>'
TextField("Cat's name", text: $catManager.cat?.name ?? "")
}
}
func ??<T>(lhs: Binding<Optional<T>>, rhs: T) -> Binding<T> {
Binding(
get: { lhs.wrappedValue ?? rhs },
set: { lhs.wrappedValue = $0 }
)
}
在每个文本字段上方的注释中显示错误消息.