我有一个视图,显示团队中使用@Fetchrequest和固定谓词“ Developers”过滤的消息。
struct ChatView: View { @FetchRequest( sortDescriptors: [NSSortDescriptor(keyPath: \Message.createdAt, ascending: true)], predicate: NSPredicate(format: "team.name == %@", "Developers"), animation: .default) var messages: FetchedResults<Message> @Environment(\.managedObjectContext) var viewContext var body: some View { VStack { List { ForEach(messages, id: \.self) { message in VStack(alignment: .leading, spacing: 0) { Text(message.text ?? "Message text Error") Text("Team \(message.team?.name ?? "Team Name Error")").font(.footnote) } }...
我想使该谓词动态化,以便在用户切换团队时显示该团队的消息。下面的代码给我以下错误
无法在属性初始化程序中使用实例成员’teamName’;属性初始化程序在“自我”可用之前运行
struct ChatView: View { @Binding var teamName: String @FetchRequest( sortDescriptors: [NSSortDescriptor(keyPath: \Message.createdAt, ascending: true)], predicate: NSPredicate(format: "team.name == %@", teamName), animation: .default) var messages: FetchedResults<Message> @Environment(\.managedObjectContext) var viewContext ...
我可以为此提供一些帮助,但到目前为止我还无法自行解决。
有同样的问题,Brad Dillon的评论显示了解决方案:
var predicate:String var wordsRequest : FetchRequest<Word> var words : FetchedResults<Word>{wordsRequest.wrappedValue} init(predicate:String){ self.predicate = predicate self.wordsRequest = FetchRequest(entity: Word.entity(), sortDescriptors: [], predicate: NSPredicate(format: "%K == %@", #keyPath(Word.character),predicate)) }
在此示例中,您可以在初始化程序中修改谓词。