如何可选地初始化@FetchRequest
How to initialize @FetchRequest optionally
我的 SwiftUI 项目中有以下代码
@FetchRequest private var step: FetchedResults<Steps>
private var processID: UUID
private var stepID: UUID?
init(procID: UUID, stepID: UUID?) {
if stepID != nil {
let predicate = NSPredicate(format: "id == %@", stepID! as CVarArg)
_step = FetchRequest<Steps>(sortDescriptors: [], predicate: predicate)
}
processID = procID
}
我想知道我是否可以以某种方式return 清空来自 init() 的步骤 FetchRequest,以防传递的 stepID 为零。当前未编译,因为 step var 未初始化。我试图将其设为可选,但编译器不喜欢它。
如果 stepID
为零,您总是可以 return a FALSEPREDICATE
。这会给你一个空的 @FetchRequest
,但是一个 non-optional 谓词参数。
init(procID: UUID, stepID: UUID?) {
let predicate: NSPredicate
if let stepID = stepID {
predicate = NSPredicate(format: "id == %@", stepID as CVarArg)
} else {
// This will return a predicate that matches nothing, so your fetch
// will be empty.
predicate = NSPredicate(format: "FALSEPREDICATE")
}
_step = FetchRequest<Steps>(sortDescriptors: [], predicate: predicate)
processID = procID
}
传递给 FetchRequest
的 init 的谓词可以是 nil,所以你可以这样做:
private var fetchRequest: FetchRequest<Steps>
private var steps: FetchedResults<Steps> {
fetchRequest.wrappedValue
}
init(stepID: UUID?) {
let predicate: NSPredicate?
if let stepID = stepID {
predicate = NSPredicate(format: "id == %@", stepID)
}
else {
predicate = nil
}
fetchRequest = FetchRequest(sortDescriptors: [], predicate: predicate)
}
我的 SwiftUI 项目中有以下代码
@FetchRequest private var step: FetchedResults<Steps>
private var processID: UUID
private var stepID: UUID?
init(procID: UUID, stepID: UUID?) {
if stepID != nil {
let predicate = NSPredicate(format: "id == %@", stepID! as CVarArg)
_step = FetchRequest<Steps>(sortDescriptors: [], predicate: predicate)
}
processID = procID
}
我想知道我是否可以以某种方式return 清空来自 init() 的步骤 FetchRequest,以防传递的 stepID 为零。当前未编译,因为 step var 未初始化。我试图将其设为可选,但编译器不喜欢它。
如果 stepID
为零,您总是可以 return a FALSEPREDICATE
。这会给你一个空的 @FetchRequest
,但是一个 non-optional 谓词参数。
init(procID: UUID, stepID: UUID?) {
let predicate: NSPredicate
if let stepID = stepID {
predicate = NSPredicate(format: "id == %@", stepID as CVarArg)
} else {
// This will return a predicate that matches nothing, so your fetch
// will be empty.
predicate = NSPredicate(format: "FALSEPREDICATE")
}
_step = FetchRequest<Steps>(sortDescriptors: [], predicate: predicate)
processID = procID
}
传递给 FetchRequest
的 init 的谓词可以是 nil,所以你可以这样做:
private var fetchRequest: FetchRequest<Steps>
private var steps: FetchedResults<Steps> {
fetchRequest.wrappedValue
}
init(stepID: UUID?) {
let predicate: NSPredicate?
if let stepID = stepID {
predicate = NSPredicate(format: "id == %@", stepID)
}
else {
predicate = nil
}
fetchRequest = FetchRequest(sortDescriptors: [], predicate: predicate)
}