当在侧边栏视图中选择用户时,我尝试将获取的对象
User
传递到我的详细视图。我不明白错误消息:
Cannot convert return expression of type 'FetchedResults<User>.Element?' (aka 'Optional<User>') to return type 'Binding<User>'
.
我的内容视图:
struct ContentView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(sortDescriptors: [SortDescriptor(\.name)])
private var users: FetchedResults<User>
@State private var selectedUserID: User.ID?
@State private var defaultUserID: User.ID?
var body: some View {
NavigationSplitView {
SidebarView(selection: selection)
} detail: {
if selection.wrappedValue != nil {
SecretDetailView(user: selectedUser) //<-- passing user object to sub-view
} else {
Text("Please select a user")
}
}
}
private var selection: Binding<User.ID?> {
Binding(get: { selectedUserID ?? defaultUserID }, set: { selectedUserID = $0 })
}
private var selectedUser: Binding<User> {
users.filter({ $0.id == selection.wrappedValue }).first //<-- ERROR!
}
}
我的详细信息-使用用户绑定查看:
struct SecretDetailView: View {
@Binding var user: User //<-- user Binding in sub-view
var secretItems: [SecretItem] {
return user.secretItems
.filter {
searchText.isEmpty ? true : $0.userName.localizedCaseInsensitiveContains(searchText)
}
.sorted(using: sortOrder)
}
@State var searchText: String = ""
@State private var selection = Set<SecretItem.ID>()
@State var sortOrder: [KeyPathComparator<SecretItem>] = [
.init(\.userName, order: SortOrder.forward)
]
var table: some View {
Table(selection: $selection, sortOrder: $sortOrder) {
TableColumn("User Name", value: \.userName)
TableColumn("Password", value: \.password) { secretItem in
Text(secretItem.password)
}
} rows: {
ForEach(secretItems) { secretItem in
TableRow(secretItem)
}
}
}
var body: some View {
ZStack(alignment: .bottom) {
table
.searchable(text: $searchText)
.navigationTitle(user.name!)
....
Binding
到 FetchRequest
/NSManagedObject
是一个谬误。
FetchRequest
是只读的,Binding
适用于值类型。
改变
FetchRequest
的唯一方法是直接影响商店。
您需要的是
@ObservedObject var user: User
编辑并查看更改
NSManagedObject
你可以使用
@State private var selectedUser:User?
但是您将无法观察到刚刚更改为
selectedUser
的对象整体属性的变化。