当前位置: 首页 > 面试题库 >

SwiftUI View和@FetchRequest谓词带有可以更改的变量

宋宏儒
2023-03-14
问题内容

我有一个视图,显示团队中使用@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))

    }

在此示例中,您可以在初始化程序中修改谓词。



 类似资料:
  • 我在应用程序中使用Querydsl来大大改进查询数据库的代码。但是,我有一个来自外部服务的JPA谓词(javax.persistence.criteria.Predicate)。我想混合使用Querydsl和外部谓词创建的查询。例如: 另一个解决方案是将Querydsl谓词转换为JPA谓词: 有可能吗?如果是,我如何做到这一点?如果没有,是否有其他混合谓词的解决方案(比如将两者转换为SQL字符串并

  • 下面的lexer语法片段应该根据类中定义的谓词来标记“自定义名称”: CUSTOM_NAME的正确匹配总是尽可能长的匹配。现在,如果lexer遇到一个自定义名称,比如,那么我希望它对整个字符串,然后用'some:cname'作为参数调用一次谓词。 编辑:这种行为的有趣之处在于,只要将部分匹配传递给谓词,谓词的结果似乎完全被lexer忽略了。这似乎效率很低。

  • 本文向大家介绍Prolog带有副作用的谓词,包括了Prolog带有副作用的谓词的使用技巧和注意事项,需要的朋友参考一下 示例 产生副作用的谓词离开了纯逻辑领域。例如: writeq/1 read/1 format/2 副作用是程序中无法推理的现象。例如,删除文件或在系统终端上输出。

  • 我试图通过首先添加花括号来创建多行,但Eclipse抱怨以下代码: 它在filter下放置红线后说:“类型中的方法不适用于参数”

  • 我一直在尝试使用聚合框架按对报告进行计数。尝试1: 这导致聚合框架抛出: 然后更改为使用而不是进行尝试#2: 最后,我在尝试#3中使用了lambda来实现接口: 这一尝试终于奏效了。 问题1:这是Hazelcast的一个bug吗?似乎聚合框架应该支持由或构建的?如果不是,那么应该创建一个新的类型(例如,)来避免这种混淆。 问题2(与问题1相关):使用lambda会导致我创建的索引未被使用。相反,映

  • 实体用户(长Id、字符串用户名、站点站点) 一个DTO用户DTO(长id、字符串用户名、字符串站点名) 转换对象很好,“siteName”自动匹配“site.name”。 因此,我放了一个QueryDSL查询,类似于: null 有什么方法可以做到这一点或达到我的目标吗? 谢谢