繁体   English   中英

在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM