[英]How to change value on button press using ForEach Identifiable SwiftUI
[英]Using Identifiable set of objects in List View in SwiftUI
我有一个由 DataCore 处理的数据库。 我正在尝试检索“分配”的任何 object 并将其插入到视图列表中。 分配 class 本身是可识别的,但尝试在视图中创建列表时出现错误:
Initializer 'init(_:id:rowContent:)' requires that 'Set<NSManagedObject>' conform to 'RandomAccessCollection'
即使对象是可识别的,集合本身是否也是不可识别的? 如何在视图列表中显示集合中的所有对象?
风景:
import SwiftUI
struct AssignmentList: View {
@ObservedObject var assignmentViewModel = assignmentViewModel()
var body: some View {
VStack {
NavigationView {
//**The error is in the following line : **
List(assignmentViewModel.allAssignments, id: \.self) { assignment in
AssignmentRow(assignmentName: assignment.assignmentName, notes: assignment.notes) //This view works by itself and just present the data as text under HStack
}
.navigationBarTitle(Text("Assignments"))
}
Button(action: {
self.assignmentViewModel.retrieveAllAssignments()
}) {
Text("Retrieve")
}
}
}
}
这是 class 的分配:
import Foundation
import CoreData
extension Assignment: Identifiable {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Assignment> {
return NSFetchRequest<Assignment>(entityName: "Assignment")
}
@NSManaged public var id: UUID?
@NSManaged public var assignmentName: String?
@NSManaged public var notes: String?
}
这是使用绑定连接到视图的 ViewModel:
class AssignmentViewModel : ObservableObject
{
private var assignmentModel = AssignmentModel()
/*AssignmentModel is a different class, we assume all methods working correctly and it's not a part of the question.*/
@Published var allAssignments : Set<Assignment>
init()
{
allAssignments=[]
}
func retrieveAllAssignment()
{
allAssignments=assignmentModel.retrieveAllAssignments()
}
}
尝试以下
List(Array(assignmentViewModel.allAssignments), id: \.self) { assignment in
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.