NSPredicate 官方文档(中文版)

概览
            NSPredicate类是用来定义逻辑条件约束的获取或内存中的过滤搜索。
           您可以使用谓词来表示逻辑条件,用于描述对象持久性存储在内存中的对象过滤。虽然从 NSComparisonPredicate, NSCompoundPredicate, 和 NSExpression的实例直接创建谓词是常见的,但是你会经常用NSPredicate的类方法解析的格式字符串来创建谓词。谓词格式字符串的例子包括:
简单的比较, 比如 grade== "7" 或者 firstNamelike "Shaffiq"
不区分大小写和音调的查找, 比如 namecontains[cd] "itroen"
逻辑运算, 比如 (firstName like "Mark") OR (lastName like "Adderley")
In OS X v10.5 and later, you can create €œbetween€ predicates such as datebetween {$YESTERDAY, $TOMORROW}.
           您可以创建关系谓词,比如:
group.name like "work*"
ALL children.age > 12
ANY children.age > 12
 
         您可以创建谓词操作,比如@sum.items.price < 1000 。完整语法参考,请参阅“谓词 编程指南” 。
         您也可以创建包含变量的谓词,那样谓词就可以在运行时(runtime)替换具体值之前预先定义。在os x v10.4,含变量的谓词,估算是一个两步骤的过程 (see predicateWithSubstitutio nVariables: and evaluateWithObject:)。在os x v10.5及以后,你可以使用 evaluateWithObject:substitutionVariables:,它结合了这些步骤。
任务
           创建谓词:
[plain] view plaincopy
+ predicateWithFormat:  
+ predicateWithFormat:argumentArray:  
+ predicateWithFormat:arguments:  
– predicateWithSubstitutio nVariables:  
+ predicateWithValue:  
+ predicateWithBlock:  
 
      评估一个谓词:
[plain] view plaincopy
– evaluateWithObject:  
– evaluateWithObject:substitutionVariables:  
 
      获取字符串表现形式:
[plain] view plaincopy
– predicateFormat  
 
 
 
类方法
1.predicateWithBlock:
           创建并返回一个谓词,评估使用指定的块对象和绑定的字典。
+ (NSPredicate *)predicateWithBlock:(BOOL (^)(id evaluatedObject, NSDictionary *bindings))block;
参数
block
              block施加于被评估的对象。
              block带有两个参数:
               evaluatedObject:被评估的对象。
              bindings:替换变量的字典。字典必须包含接收器中所有变量的键值对。
              如果evaluatedObject的计算结果为true,该块返回YES,否则为NO 。
返回值
            一个评估对象使用了块的谓词。                    
特殊考虑
            在os X v10.6.Core Data 在内存和原子存储中支持这个方法,但是基于SQLite的存储是不支持的。
有效性
            4.0及以后有效
声明于
            NSPredicate.h
 
2.predicateWithFormat:
           由给定的格式和解析结果创建一个新的字符串来创建并返回一个新的谓词。
+ (NSPredicate *)predicateWithFormat:(NSString *)format, ...
参数
         format:新谓词的格式字符串。
         ...:以逗号分隔的参数列表。
返回值
         一个新的谓词,由创建一个新的格式字符串并且解析这个结果(即那个新的格式字符串)所得。
讨论
         格式字符串的格式和变量替换的限制,请参阅 Predicate Format String Syntax
有效性
          IOS  3.0及以后有效。
相关的代码例子
         ThreadedCoreData
         ToolbarSearch
         WeatherMap
 
声明于
         NSPredicate.h
 
3.predicateWithFormat:argumentArray:
        创建并且返回一个新的谓词,通过把数组里面的值传入到格式字符串中并且解析所得。
+ (NSPredicate *)predicateWithFormat:(NSString *)predicateFormat argumentArray:(NSArray*)arguments
参数
         predicateFormat:新谓词的格式字符串。
         arguments:要代入格式字符串的数组。代入的时候数组里的值按照数组里的顺序。
返回值
         一个新的谓词,通过把数组中的值按顺序代入格式字符串并解析所得。
讨论
         格式字符串的格式和变量替换的限制,请参阅 Predicate Format String Syntax。
有效性
         IOS 3.0及以后有效。
声明于
         NSPredicate.h
 
4.predicateWithFormat:arguments:
         创建并且返回一个新的谓词,通过把参数列表中的参数代入格式字符串中并且解析得到。
参数
         predicateFormat:新谓词的格式字符串。
         argList:代入格式谓词中的内容。参数列表代入顺序即它们出现在列表中的顺序。
返回值
         一个新的谓词,通过把参数列表中的值按顺序代入格式字符串并解析所得。
讨论
         格式字符串的格式和变量替换的限制,请参阅 Predicate Format String Syntax。
有效性
         IOS 3.0及以后有效。
声明于
         NSPredicate.h
5.predicateWithValue:
         通过评估一个给定的值来创建并返回一个谓词。
+ (NSPredicate *)predicateWithValue:(BOOL)value
参数
         value:新谓词需要评估的值。
返回值
         评估一个值得到的谓词。
有效性
         IOS 3.0及以后有效。
声明于
         NSPredicate.h
 
 
实例方法
1.evaluateWithObject:
         返回一个给定的BOOL值,用于指示一个给定的对象是否匹配接收者的特殊条件。
- (BOOL)evaluateWithObject:(id)object
参数
         objec:接收者评估的对象。
返回值
         如果对象匹配接收者特殊条件则返回YES,否则NO.
有效性
         IOS 3.0及以后有效。
声明于
         NSPredicate.h
 
2.evaluateWithObject:substitutionVariables:
 
         返回一个给定的BOOL值,用于指示一个给定的对象在一个给定的变量字典中的值代入后是否匹配接收者的特殊条件。
- (BOOL)evaluateWithObject:(id)object substitutionVariables:(NSDictionary *)variables
参数
         objec:接收者评估的对象。
         variables:替换变量的字典。字典必须包含接收者所有变量的键值对。
返回值
         全部匹配返回YES,否则NO.
讨论
         此方法和那两个步骤"首先引用接收者的predicateWithSubstitutio nVariables:然后引用返回的谓词的 evaluateWithObject:"返回的结果一样。此方法在反复评估不同变量替换的谓词情况下被优化。
有效性
         IOS 3.0及以后有效。
声明于
         NSPredicate.h
3.predicateFormat
         返回接收者的格式字符串。
- (NSString *)predicateFormat
返回值
         接收者的格式字符串
特殊考虑
         用这个方法返回的字符串不能够保证和使用predicateWithFormat:等方法返回的字符串一样。你不能用这个方法来创建一个谓词的持久化表示,但是你可以用它来再现原始谓词。如果你需要一个谓词的持久化表示,你可以创建一个archive(NSPredicate采用NSCoding协议)
有效性
         IOS 3.0及以后有效。
声明于
         NSPredicate.h
 
4.predicateWithSubstitutio nVariables:
         通过用给定的替换字典中的值替换接收者的变量,返回接收者的副本。
- (NSPredicate *)predicateWithSubstitutio nVariables:(NSDictionary *)variables
参数
         variables:替换变量字典。字典必须包含接收者素有变量的键值对。
返回值
         接收者的值被特殊变量替换所返回的接收者副本。
讨论
         接收者本身不会被方法所改变,所以你可以重复使用任意数量的替换。
有效性
         IOS 3.0及以后有效。
声明于
         NSPredicate.h
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用NSPredicate的Swift代码示例,用于将大量数据按时间分组: ```swift struct DataItem { let name: String let timeStamp: TimeInterval // 时间戳 } func groupDataByTime(_ data: [DataItem]) -> [[DataItem]] { // 将数据按时间先后排序 let sortedData = data.sorted { $0.timeStamp < $1.timeStamp } // 创建空字典 var groups = [String: [DataItem]]() // 使用NSPredicate过滤并分组数据 let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd" for item in sortedData { let date = Date(timeIntervalSince1970: item.timeStamp) let dateString = dateFormatter.string(from: date) let predicate = NSPredicate(format: "SELF.dateString == %@", dateString) let filteredArray = (groups as NSDictionary).filtered(using: predicate) if var items = filteredArray.first?.value as? [DataItem] { items.append(item) groups[dateString] = items } else { groups[dateString] = [item] } } // 将分组后的数据按时间先后顺序排序 let sortedGroups = groups.sorted { $0.key < $1.key } // 将所有分组添加到一个数组中 var result = [[DataItem]]() for (_, items) in sortedGroups { result.append(items) } return result } ``` 在这个示例中,我们同样定义了一个`DataItem`结构体来表示数据的名称和时间戳。`groupDataByTime`函数首先将数据按时间先后排序,然后使用`NSPredicate`过滤并分组数据。我们指定`NSPredicate`的格式为`SELF.dateString == %@`,其中`dateString`是我们根据时间戳计算得到的时间字符串,`%@`是用于替换的占位符。通过对字典进行过滤,我们可以得到一个包含指定时间字符串的数组,然后将新的数据项添加到这个数组中。最后,我们将所有分组添加到一个大数组中,按时间先后顺序排序,并返回结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值