謂詞? 謂詞在我們的iOS開發(fā)過程中是必不可少的,謂詞的作用主要是篩選過濾,提供的數(shù)據(jù)不能滿足我們的需求的時候,我們就需要進行篩選過濾.再說如何使用謂詞之前 我要先說一下在謂詞中能用關(guān)系運算符,當然了我會在下一篇博客中講一下如何進行使用正則表達式和謂詞是如何配合使用的.
1.1 比較運算符
比較運算符就是我們 常用< > = between 這四個的組合.
> : 大于
< : 小于
>= : 大于等于
<= : 小于等于
=,== : 等于
!=,<> : 不等于
between : 左邊的表達式等于右邊的表達式的值或者介于它們之間。右邊是一個有兩個指定上限和下限的數(shù)值的數(shù)列(指定順序的數(shù)列)棘街。比如,1 BETWEEN { 0 , 33 }抑片,或者$INPUT BETWEEN { $LOWER, $UPPER }。
1.2邏輯運算符
對于邏輯運算符,我們主要是與(&&)或(||)非(!)
and/&& : 與
or/|| : 或
not/! : 非
1.3關(guān)系運算符
ANY幌绍,SOME : 指定下列表達式中的任意元素膳犹。比如,ANY children.age < 18铃在。
ALL : 指定下列表達式中的所有元素。比如碍遍,ALL children.age < 18定铜。
NONE :指定下列表達式中沒有的元素。比如怕敬,NONE children.age < 18揣炕。它在邏輯上等于NOT (ANY ...)。
IN :等于SQL的IN操作东跪,左邊的表達必須出現(xiàn)在右邊指定的集合中畸陡。比如鹰溜,name IN { 'Ben', 'Melissa', 'Nick' }。
2.1謂詞的簡單使用
看完上面三種運算符,下面我們就說一下如何進行使用謂詞簡單使用.首先我們先創(chuàng)建一個model,用于我們進行篩選操作.
Student.h中
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property(strong,nonatomic)NSString *name;//姓名
@property(assign,nonatomic)NSInteger age;//年齡
-(instancetype)initWithName:(NSString *)name age:(NSInteger )age;
@end
Studnet.m中
#import "Student.h"
@implementation Student
-(instancetype)initWithName:(NSString *)name age:(NSInteger )age{
if (self = [super init]) {
self.name = name;
self.age = age;
}
return self;
}
@end
我們在ViewController的ViewDidLoad方法中做對應的演示
這里我用的是可變數(shù)組,所以使用方法是- (void)filterUsingPredicate:(NSPredicate *)predicate;
如果是不可變數(shù)組,我們需要使用的方法是帶有返回值的 -(NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate;
//
// ViewController.m
// iOS謂詞演示
//
// Created by songjc on 16/4/24.
// Copyright ? 2016年 Don9. All rights reserved.
//
#import "ViewController.h"
#import "Student.h"
@interface ViewController ()
@property(strong ,nonatomic)NSMutableArray *oldArray;//原始的數(shù)組
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//創(chuàng)建篩選對象
Student *student1 = [[Student alloc]initWithName:@"棟哥" age:18];
Student *student2 = [[Student alloc]initWithName:@"強哥" age:17];
Student *student3 = [[Student alloc]initWithName:@"洋爺" age:20];
Student *student4 = [[Student alloc]initWithName:@"政哥" age:25];
Student *student5 = [[Student alloc]initWithName:@"小明" age:13];
//初始化oldArray并且對其進行添加元素
self.oldArray = [NSMutableArray arrayWithObjects:student1,student2,student3,student4,student5, nil];
//初始化謂詞
/**************************(簡單的運用)**********************************/
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age > 20"];//年齡大于20
[self .oldArray filterUsingPredicate:predicate];
for (Student *student in self.oldArray) {
NSLog(@"%@",student.name);
}
/**************************(或的運用)**********************************/
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"age > 20 || name == %@",@"棟哥"];//年齡大于20或者名字叫棟哥.
[self .oldArray filterUsingPredicate:predicate1];
for (Student *student in self.oldArray) {
NSLog(@"%@",student.name);
}
/**************************(與的運用)**********************************/
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"age < 20 && name == %@",@"棟哥"];//年齡大于20并且名字叫棟哥.
[self .oldArray filterUsingPredicate:predicate2];
for (Student *student in self.oldArray) {
NSLog(@"%@",student.name);
}
/**************************(非的運用)**********************************/
NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"name != %@",@"棟哥"];//名字不叫棟哥.
[self .oldArray filterUsingPredicate:predicate3];
for (Student *student in self.oldArray) {
NSLog(@"%@",student.name);
}
}
@end