【问题标题】:If else statement to define an NSPredicateIf else 语句定义一个 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 类的抽象对象:创建一个具体实例!”

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

【问题讨论】:

    标签: ios swift 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)
    

    【讨论】: