我在这里看到了相同类型的错误,但使用了不同类型的代码,所以我认为最好就此上下文提出一个新问题。我试图通过尝试传递一个字符串变量(用作查找该实体的键)来从核心数据中“查找特定实体”title
into @FetchRequest
。这是我使用过的代码的一部分
struct AccountMainPage: View {
//*** User input ***
var title: String
//*** Core data enviroment initialisation ***
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(fetchRequest: Accounts.getSpecificAccounts(findTitle: title)) var fetchedAccount: FetchedResults<Accounts>
var body: some View {
//SOME CODE HERE
}
}
公开课Accounts
具有扩展名:
extension Accounts {
static func getSpecificAccounts(findTitle: String) -> NSFetchRequest<Accounts> {
let request: NSFetchRequest<Accounts> = Accounts.fetchRequest() as! NSFetchRequest<Accounts>
let findDescriptor = NSPredicate(format: "title == %@",findTitle)
request.predicate = findDescriptor
return request
}
}
然而,该行与@FetchRequest(fetchRequest: Accounts.getSpecificAccounts(findTitle: title)) var fetchedAccount: FetchedResults<Accounts>
有语法错误:
无法在属性初始值设定项中使用实例成员“标题”;属性初始值设定项在“self”可用之前运行
我的代码有问题吗?
@FetchRequest
是动态属性,与任何其他属性一样,在您之前初始化AccountMainPage
init
被称为,所以self
尚不可用,这就是为什么你不能使用title
属于以下成员的财产self
,这就是编译器错误所告诉的内容。
所以这是一个可能的解决方案:我们使用存根请求初始化 fetch request 属性,然后在init
,稍后调用,用真正的获取请求重新初始化它。
这是一个方法演示(所有不相关的内容都被删除):
struct ContentView: View {
var title: String
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(fetchRequest: Accounts.fetchRequest()) var fetchedAccount: FetchedResults<Accounts>
init(title: String) {
self.title = title
_fetchedAccount = FetchRequest<Accounts>(fetchRequest: Accounts.getSpecificAccounts(findTitle: title))
}
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)