If else语句来定义一个NSPredicate
问题描述:
我试图定义一个基于段控制器开关的谓词。If else语句来定义一个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 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)