使用Swift以编程方式设置Realm查询过滤器

时间:2016-02-17 01:53:23

标签: swift swift2 realm

是否可以通过编程方式设置Realm查询过滤器?

背景
我的应用程序是一个基于习惯的应用程序工作连续7天检查条纹; 7天连续检查ins = 1连胜。

在对象中:“Streak”有一些名为:

的列

Day 1 | Day 2 | ... | Day 7

示例查询是:

let todayCheckIn = realm.objects(Streak).filter("Day1" == 1).sorted("StartDate").last

这是检查Realm对象Streak以及用户是否已在1列中的Day1表示“已签入”。

我可以使用一系列If / Else语句来选择查询,但我更希望让Swift确定要过滤哪一列,并以编程方式设置 - 只使用一个查询

e.g。

let day = "Day1"
let todayCheckIn = realm.objects(Streak).filter(day == 1).sorted("StartDate").last

我试过了:

let todayCheckIn = realm.objects(Streak).filter(\(day) == 1).sorted("StartDate").last

但这也不起作用。

有没有办法像这样以编程方式设置Realm查询过滤器?

非常感谢!

2 个答案:

答案 0 :(得分:1)

filter()采用NSPredicate格式字符串,支持动态提供的密钥名称%K

let day = "Day1"
let todayCheckIn = realm.objects(Streak).filter("%K = 1", day).sorted("StartDate").last

答案 1 :(得分:0)

您需要定义并构建NSPredicate。这样的事情应该有效:

let day = "Day1"
let formatString = day + " == %@"
let predicate = NSPredicate(format: formatString, 1)
let todayCheckIn = realm.objects(Streak).filter(predicate).sorted("StartDate").last