@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!
)
}