Можно ли передать несколько параметров NSPredicate, называя их вместо %@
NSPredicate пройти «несколько» параметров по имени [в Swift]
К примеру, у меня есть directly-passed
Parameters me
и you
.
public static func ConversationByUserId(userId : String) -> [Message] {
// Either Created By me and sent to you.
// Or, created by you and sent to me
let me = UserRepo.GetLoggedInUser()?.id
var format = "(createdBy == '" + me! + "' && createdTo == '" + userId + "') "
format += " || (createdBy == '" + userId + "' && createdTo == '" + me! + "') "
print(format)
//prints: (createdBy == '1' && createdTo == '5') || (createdBy == '5' && createdTo == '1')
let predicate = NSPredicate(format: format)
return Filter(predicate);
}
Примечание: Filter(predicate)
выполняет операцию и возвращает результат. Все идет нормально. Я получаю ожидаемые результаты. Наверное, у этого могут быть проблемы, такие как атаки SQL.
Могу ли я сделать что-то вроде ниже: Если да, то как?
var format = "(createdBy == @me && createdTo == @you) "
format += " || (createdBy == @you && createdTo == @me) "
let predicate = NSPredicate(format: format, [ "me" : me, "you" : you ])
До сих пор я достиг является:
format = "(createdBy == %@ && createdTo == %@) "
format += " || (createdBy == %@ && createdTo == %@) "
let predicate = NSPredicate(format: format, me!, you, me!, you)
Этот ответ и другие говорят об использовании NSComparisonPredicate для предотвращения внедрения SQL: http://stackoverflow.com/questions/3076894/how-to-prevent-sql-injection-in-core-data – Moshe
@Moshe, не делает смысл для меня. Если вы знаете ответ в ответ быстро? – tika