SwiftUI @FetchRequest如何解决此属性包装器的局限性

时间:2019-12-09 14:39:29

标签: core-data swiftui

@FetchRequest的新SwiftUI属性包装器是非常好的工具,但是我认为它有重要的局限性。它可以与一些静态内容一起使用。但是,如果我想根据其他var的状态发出这样的请求,似乎很难实现

@UserDefault(UserDefaultKey.UserId, defaultValue: "")
    var userId: String

@FetchRequest(
        entity: Company.entity(),
        sortDescriptors: [
            NSSortDescriptor(keyPath: \User.email, ascending: true)
        ],
        predicate: NSPredicate(format: "id == %@", self.userId)
    )
   var user: FetchedResults<User>

上面的代码示例无法编译,因为它会导致错误:

  

使用未解决的标识符“ self”

据我所知,解决该问题的唯一方法是编写init()并将userId注入其中,但这会使获取数据库结果的所有过程变得不那么有趣。

这样的东西也行不通。并且必须将userId传递给一个组件,然后让用户将关系ID传递给另一个视图组件,似乎很麻烦

init() {

        var predicate: NSPredicate = NSPredicate(format: "id == %@", self.settings.userId)

        self._fetchRequest = FetchRequest(
            entity: Company.entity(),
            sortDescriptors: [
                NSSortDescriptor(keyPath: \User.email, ascending: true)
            ],
            predicate: predicate!
        )
    }

0 个答案:

没有答案