是否可以通过编程方式设置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查询过滤器?
非常感谢!
答案 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