2017-01-11 6 views
0

Я пытаюсь получить данные от CoreData, используя NSPredicate. Проблема заключается в том, мне нужно только сравнить первую цифру стоимости объекта:NSPredicate получение первой цифры

class Foo: NSManagedObject { 

    @NSManaged var value: NSNumber // random number 1xx - 7xx 

} 

Мой текущий предикат сравнения полное значение:

NSPredicate(format: "value == %d", 5) 

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

Вопрос:
Как я должен изменить свой предикат, чтобы он мог сравнить первую цифру value?

+0

Все ли цифры имеют 3 цифры? Тогда 'NSPredicate (format:" value> =% d AND value <=% d ", 500, 599)' будет работать. –

+0

@MartinR Да, все они имеют 3 цифры, но то, что я не объяснил правильно, состоит в том, что '5' является динамическим числом. Это может быть между '0' и' 10'. –

ответ

0

Я не знаю предиката Core Data, который проверяет первую цифру числа. Для строк вы можете использовать BEGINSWITH.

Но если (как в вашем случае) все номера имеют 3 цифры, то вы можете создать предикат для чисел в заданном диапазоне вместо:

let digit = 5 // some number in the range 0...9 
let predicate = NSPredicate(format: "value >= %ld AND value <= %ld", digit * 100, digit * 100 + 99) 

(Обратите внимание, что правильный формат для Int аргументов %ld.)

+0

Спасибо, я был слишком зациклен на получении первой цифры 'value' вместо того, чтобы найти другой способ ее решения. –