Ios 用于定义NSPredicate的If else语句

Ios 用于定义NSPredicate的If else语句,ios,swift,nspredicate,Ios,Swift,Nspredicate,我试图定义一个基于段控制器开关的谓词 if self.streamtype == "case1" { let predicatearray = defaults.object(forKey: "case1") as! [String] let predicate = NSPredicate(format: "UserID IN %@" , predicatearray) } else if self.streamtype == "case2" { let predicat

我试图定义一个基于段控制器开关的谓词

if self.streamtype == "case1" {
    let predicatearray = defaults.object(forKey: "case1") as! [String]
    let predicate = NSPredicate(format: "UserID IN %@" , predicatearray)
} else if self.streamtype == "case2" {
    let predicate = NSPredicate(format: "TRUEPREDICATE", argumentArray: nil)
} else {
    let predicatearray = defaults.object(forKey: "case3") as! [String]
    let predicate = NSPredicate(format: "UserID IN %@", predicatearray)
}

let publicData = CKContainer.default().publicCloudDatabase
let query = CKQuery(recordType: "Post", predicate: predicate)
我得到一个错误,说:

“无法发送到NSPredicate类的抽象对象:创建具体实例!”


另外,它告诉我从未使用过谓词变量的初始化。我尝试了几种不同的方法编写函数,但这对我来说最有意义,因为我只需要在加载新信息时更新谓词,所以我将两个函数放在一个函数中。

您在
if{}
else{}
范围内定义谓词,这就是为什么它在范围外不可见的原因

var predicate : NSPredicate!
if self.streamtype == "case1" {
    let predicatearray = defaults.object(forKey: "case1") as! [String]
    predicate = NSPredicate(format: "UserID IN %@", predicatearray)
} else if self.streamtype == "case2" {
    predicate = NSPredicate(format: "TRUEPREDICATE", argumentArray: nil)
} else {
    let predicatearray = defaults.object(forKey: "case3") as! [String]
    predicate = NSPredicate(format: "UserID IN %@", predicatearray)
}

let publicData = CKContainer.default().publicCloudDatabase
let query = CKQuery(recordType: "Post", predicate: predicate)

您正在
if{}
else{}
范围内定义谓词,这就是它在范围外不可见的原因

var predicate : NSPredicate!
if self.streamtype == "case1" {
    let predicatearray = defaults.object(forKey: "case1") as! [String]
    predicate = NSPredicate(format: "UserID IN %@", predicatearray)
} else if self.streamtype == "case2" {
    predicate = NSPredicate(format: "TRUEPREDICATE", argumentArray: nil)
} else {
    let predicatearray = defaults.object(forKey: "case3") as! [String]
    predicate = NSPredicate(format: "UserID IN %@", predicatearray)
}

let publicData = CKContainer.default().publicCloudDatabase
let query = CKQuery(recordType: "Post", predicate: predicate)