我只是迁移使用CoreDate而不是简单的集合。我正在使用iOS13 beta 8和Xcode11 beta 6。
struct BeaconList: View { @Environment(\.managedObjectContext) var managedObjectContext @FetchRequest(fetchRequest: fetchRequest(), animation: nil) var beacons: FetchedResultsstatic func fetchRequest() -> NSFetchRequest { let request: NSFetchRequest = Beacon.fetchRequest() request.sortDescriptors = [NSSortDescriptor(key: "id", ascending: true)] return request } func buildView(name: String, beacons: [Beacon]) -> AnyView { return AnyView ( Section(header: Text(name)) { ForEach(beacons) { beacon in BeaconListEntry(beacon: beacon) } } ) } var body: some View { TabView { NavigationView { List { buildView(name: "MY BEACONS", beacons: beacons.filter { $0.isActive }) } .navigationBarTitle("Beacons") .listStyle(GroupedListStyle()) .navigationBarItems(trailing: addButton) } .tabItem { Image(systemName: "antenna.radiowaves.left.and.right") Text("Beacons") } } }
并BeaconListEntry
如下所示:
struct BeaconListEntry : View { @Binding var beacon: Beacon var body: some View { HStack { Text(verbatim: beacon.name!) } } }
(请忽略强制展开,仅用于测试目的)
当我在重写之前将其与集合一起使用时,它可以工作,但是现在我得到了消息
Cannot invoke initializer for type 'ForEach<_, _, _>' with an argument list of type '([Beacon], @escaping (Binding) -> BeaconListEntry)'
和
1. Overloads for 'ForEach<_, _, _>' exist with these partially matching parameter lists: (Data, content: @escaping (Data.Element) -> Content), (Range, content: @escaping (Int) -> Content)
对哪里看有任何想法吗?这是正确的使用方式FetchedResults
吗?