tik*_*ika 2 core-data nspredicate ios swift
是否可以通过命名而不是将多个参数传递给NSPredicate %@
例如,我有一个directly-passed参数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);
}
Run Code Online (Sandbox Code Playgroud)
注意:Filter(predicate)执行操作并返回结果.到现在为止还挺好.我得到了预期的结果.但是,我想这可能会出现SQL攻击等问题.
我可以做下面的事情:如果是这样,怎么样?
var format = "( createdBy == @me && createdTo == @you ) "
format += " || ( createdBy == @you && createdTo == @me ) "
let predicate = NSPredicate(format: format, [ "me" : me, "you" : you ])
Run Code Online (Sandbox Code Playgroud)
到目前为止我所取得的成就是:
format = "( createdBy == %@ && createdTo == %@ ) "
format += " || ( createdBy == %@ && createdTo == %@ ) "
let predicate = NSPredicate(format: format, me!, you, me!, you)
Run Code Online (Sandbox Code Playgroud)
您可以使用NSPredicate predicateWithSubstitutionVariables(请参阅Apple Docs).像往常一样创建谓词,使用"$ variable"代替要替换的值:
var format = "( createdBy == $me && createdTo == $you ) "
format += " || ( createdBy == $you && createdTo == $me ) "
let predicate = NSPredicate(format: format)
Run Code Online (Sandbox Code Playgroud)
然后创建一个包含变量名称和要传递的值的字典:
let subVars = ["me" : me!, "you" : you!]
Run Code Online (Sandbox Code Playgroud)
最后创建一个变量名称替换为您的值的谓词:
let finalPredicate = predicate.predicateWithSubstitutionVariables(subVars)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1450 次 |
| 最近记录: |