如何选择性地初始化@FetchRequest

Daw*_*awy 2 init swiftui fetchrequest

我的 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
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以以某种方式从 init() 返回空步骤 FetchRequest,以防传递的 stepID 为零。当前未编译它,因为步骤 var 未初始化。我试图使其成为可选的,但编译器不喜欢它。

Yrb*_*Yrb 5

你总是可以返回FALSEPREDICATEif stepIDis nil。这将为您提供一个空的@FetchRequest但非可选的谓词参数。

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
}
Run Code Online (Sandbox Code Playgroud)