Невозможно отфильтровать после Date in Realm swift

Я пытаюсь применить фильтр к области, которая включает дату, но безуспешно.

Я обнаружил, что объект Date не может быть передан, потому что формат %@ ожидает объект Foundation в качестве аргумента, поэтому я применил приведение к NSDate.

let newDate = Date()
realm.objects(E.self)
            .filter(String(format: "%@ <= %@", key, newDate as NSDate)).first

Появляется проблема: «Невозможно проанализировать временную метку строки формата == 2020-03-20 08:21:00 +0000».

key — это имя поля, в данном случае это «отметка времени», а в модели оно имеет тип «Дата».

Любой вклад приветствуется.

Спасибо


person hepifish    schedule 20.03.2020    source источник
comment
Я думаю, вы хотели написать .filter("\(key) <= %@", newDate as NSDate)?   -  person Sweeper    schedule 20.03.2020
comment
Я успешно использовал .filter(String(format: "%@ = '%@'", key, value)).first раньше, но это была строка, а не дата. Я не уверен на 100%, как это должно быть сделано, но я попробую и с вашим предложением, спасибо.   -  person hepifish    schedule 20.03.2020
comment
@Sweeper, похоже, работает, но я не знаю, почему :)) Не могли бы вы опубликовать ответ с этим и, возможно, объяснение, чтобы я мог правильно его отметить?   -  person hepifish    schedule 20.03.2020


Ответы (1)


Вы должны использовать:

.filter("\(key) <= %@", newDate as NSDate)

Это вызов перегрузки метода Realm filter, который принимает формат и аргументы.

String(format:) здесь не подходит, так как это просто форматирование строки. Но здесь вы хотите, чтобы дата была отформатирована в соответствии с правилами форматов NSPredicate. С другой стороны, key можно просто вставить в строку, потому что имя столбца таблицы не нуждается в специальном формате.

Если key исходит из UITextField или чего-то подобного, то вам, возможно, придется остерегаться инъекций и заранее правильно проверить и/или экранировать key.

person Sweeper    schedule 20.03.2020
comment
Большое спасибо, ключ исходит от службы в React-Native, поэтому я не думаю, что это будет проблемой. - person hepifish; 20.03.2020