2017-06-04 53 views
0

我试图定义一个基于段控制器开关的谓词。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的抽象对象:创建一个具体的实例”

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

回答

2

您正在定义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)