If else 语句定义一个 NSPredicate

Posted

技术标签:

【中文标题】If else 语句定义一个 NSPredicate【英文标题】:If else statement to define an NSPredicate 【发布时间】:2017-06-04 00:57:47 【问题描述】:

我正在尝试基于段控制器开关定义谓词。

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 类的抽象对象:创建一个具体实例!”

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

【问题讨论】:

【参考方案1】:

您在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 语句定义一个 NSPredicate的主要内容,如果未能解决你的问题,请参考以下文章

if...else 语句

控制语句

if...else if语句

宏定义宏函数 if else语句报错:error: ‘else’ without a previous ‘if’(看似解决实际上没解决)

if-else语句

为什么if else 语句里不能用函数声明定义函数,而可以用函数表达式定义函数