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语句报错:error: ‘else’ without a previous ‘if’(看似解决实际上没解决)