SwiftUI核心数据,分组列表获取结果
使用核心数据我存储一些机场,每个机场我存储不同的注释 我创建了实体机场和实体简报 机场有1个称为icaoAPT的属性,简报有4个属性类别、描述符、icaoAPT和noteID 在我的Details视图中,我显示了与该机场相关的所有注释列表,我通过另一个名为FilterList的视图实现了动态获取SwiftUI核心数据,分组列表获取结果,swift,core-data,swiftui,Swift,Core Data,Swiftui,使用核心数据我存储一些机场,每个机场我存储不同的注释 我创建了实体机场和实体简报 机场有1个称为icaoAPT的属性,简报有4个属性类别、描述符、icaoAPT和noteID 在我的Details视图中,我显示了与该机场相关的所有注释列表,我通过另一个名为FilterList的视图实现了动态获取 import SwiftUI import CoreData struct FilterLIst: View { var fetchRequest: FetchRequest<Brie
import SwiftUI
import CoreData
struct FilterLIst: View {
var fetchRequest: FetchRequest<Briefing>
@Environment(\.managedObjectContext) var dbContext
init(filter: String) {
fetchRequest = FetchRequest<Briefing>(entity: Briefing.entity(), sortDescriptors: [], predicate: NSPredicate(format: "airportRel.icaoAPT == %@", filter))
}
func update(_ result : FetchedResults<Briefing>) ->[[Briefing]]{
return Dictionary(grouping: result) { (sequence : Briefing) in
sequence.category
}.values.map{$0}
}
var body: some View {
List{
ForEach(update(self.fetchRequest.wrappedValue), id: \.self) { (section : Briefing) in
Section(header: Text(section.category!)) {
ForEach(section, id: \.self) { note in
Text("hello")
/// Xcode error Cannot convert value of type 'Text' to closure result type '_'
}
}
}
}
}
}
导入快捷界面
导入CoreData
结构过滤器列表:视图{
var fetchRequest:fetchRequest
@环境(\.managedObjectContext)变量dbContext
初始化(筛选器:字符串){
fetchRequest=fetchRequest(实体:Briefing.entity(),sortDescriptors:[],谓词:NSpreditate(格式:“airportRel.icaoAPT==%@”,过滤器))
}
func更新(uu结果:FetchedResults)->[[简报]]{
返回字典(分组:结果){(顺序:简报)在
序列.类别
}.values.map{$0}
}
var body:一些观点{
名单{
中的ForEach(更新(self.fetchRequest.wrappedValue),id:\.self){(节:简报)
节(标题:文本(节.类别!)){
ForEach(节,id:\.self){note in
文本(“你好”)
///Xcode错误无法将“Text”类型的值转换为闭包结果类型“\u1”
}
}
}
}
}
}
在这个视图中,我尝试使用func更新显示按类别划分的所有部分。。。
但是Xcode给了我这个错误,我不明白为什么..无法将类型为“Text”的值转换为闭包结果类型“\ux”
在参考之前,我在我的详细信息视图下面列出
import SwiftUI
struct DeatailsView: View {
@Environment(\.managedObjectContext) var dbContext
@Environment(\.presentationMode) var presentation
@State var airport : Airport
@State var note = ""
@State var noteTitle = ["SAFTY NOTE", "TAXI NOTE", "CPNOTE"]
@State var notaTitleSelected : Int = 0
@State var notaID = ""
var body: some View {
Form{
Section(header: Text("ADD NOTE Section")) {
TextField("notaID", text: self.$notaID)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
TextField("add Note descrip", text: self.$note)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
Picker(selection: $notaTitleSelected, label: Text("Class of Note")) {
ForEach(0 ..< noteTitle.count) {
Text(self.noteTitle[$0])
}
}
HStack{
Spacer()
Button(action: {
let nota = Briefing(context: self.dbContext)
nota.airportRel = self.airport
nota.icaoAPT = self.airport.icaoAPT
nota.descript = self.note
nota.category = self.noteTitle[self.notaTitleSelected]
nota.noteID = self.notaID
do {
try self.dbContext.save()
debugPrint("salvato notazione")
} catch {
print("errore nel salva")
}
}) {
Text("Salva NOTA")
}
Spacer()
}
}
Section(header: Text("View Note")) {
FilterLIst(filter: airport.icaoAPT ?? "NA")
}
}
}
}
导入快捷界面
结构detailsview:视图{
@环境(\.managedObjectContext)变量dbContext
@环境(\.presentationMode)变量表示
@国家机场:机场
@State var note=“”
@状态变量noteTitle=[“安全注释”、“出租车注释”、“CPNOTE”]
@状态变量notateSelected:Int=0
@State var notaID=“”
var body:一些观点{
形式{
节(标题:文本(“添加注释节”)){
TextField(“notaID”,文本:self.$notaID)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
文本字段(“添加注释描述”,文本:self.$Note)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
选择器(选择:$notaTitleSelected,标签:Text(“注释类”)){
ForEach(0..
感谢您的帮助这是因为您试图迭代单个
简报
对象,而ForEach
循环需要一个集合:
请注意,update
方法的结果是类型[[Briefing]]
,这意味着ForEach
中的参数是部分:[Briefing]
(而不是Briefing
):
(如果确定第一个元素存在)
为了清楚起见,我明确指定了类型。这也是确保您始终使用正确类型的一个好方法
let data: [[Briefing]] = update(self.fetchRequest.wrappedValue)
但是,Swift可以自动推断类型。在下面的示例中,数据
的类型为[[Briefing]]
:
let data = update(self.fetchRequest.wrappedValue)
非常感谢,我知道问题出在哪里了。。真的很感激很有用。。。
var body: some View {
let data: [[Briefing]] = update(self.fetchRequest.wrappedValue)
return List {
ForEach(data, id: \.self) { (section: [Briefing]) in
Section(header: Text("")) { // <- can't be `section.category!`
self.categoryView(section: section)
}
}
}
}
Text(section[0].category!)
let data: [[Briefing]] = update(self.fetchRequest.wrappedValue)
let data = update(self.fetchRequest.wrappedValue)