iOSのNSPredicateに述語を使用するのは簡単

1つ の#import  " ViewController.h " 
2  の#import  " Person.h " 
3。 
4。 @interface のViewController()
 5。 
6。 @end 
7。 
8。 @implementation のViewController
 9。 
10 - (ボイド){のviewDidLoad
 11。     [スーパーのviewDidLoad];
 12である     // NSPredicate財団は、取得したデータを指定したクラスを濾過または方法です。これは、SQLおよびクロスのような正規表現、のようなクエリ言語での論理検索する条件のセットを定義するために、表現、自然言語インタフェースを提供
13      * firstNames = @ [NSArrayの@「アリス@ " ボブ""@ チャーリー" " @ クエンティン" ];
14      にNSArray * lastNames = @ [ @ " スミス" @" ジョーンズ" @" スミス" @" のAlberts " ];
15      にNSArray *年齢= @ [@ 24、@ 27、@ 33、@ 31 ]。
16      NSMutableArrayの*人= [NSMutableArrayの配列];
17      [firstNames enumerateObjectsUsingBlock:^(ID  _Nonnull OBJ、NSUInteger IDX、BOOL * _Nonnull停止){
 18          人*人= [[人のalloc] INIT]。
19          person.firstName = firstNames [IDX]。
20          person.lastName = lastNames [IDX]。
21          person.age = 年代[IDX]。
22          [人々のaddObject:人];
23      }]。
24      NSPredicate * bobPredicate = [NSPredicate predicateWithFormat:@ " のfirstName = 'ボブ" ];
25      NSPredicate * smithPredicate = [NSPredicate predicateWithFormat:@ " lastNameの=%@ "@ " スミス" ];
26      NSPredicate * thirtiesPredicate = [NSPredicate predicateWithFormat:@ " 年齢> = 30 " ];
27      
28      // [ "ボブ・ジョーンズ"] 
29      のNSLog(@ " ボブ:%@ " 、[人filteredArrayUsingPredicate:bobPredicate]);
30      // [ "アリス・スミス"、 "チャーリー・スミス"] 
31      のNSLog(@ " スミス:%@ " 、[人filteredArrayUsingPredicate:smithPredicate]);
32      // [「チャーリー・スミス」、「クエンティン・アルバーツ」
[人々 filteredArrayUsingPredicate:thirtiesPredicate]);
 34は、     
35      / * 
36       のフィルタにNSArray / NSMutableArrayの&NSSet / NSMutableSetに述語(predicateA)を提供するための基礎方法。
37       とfilteredSetUsingPredicate:不変コレクション、NSArrayの&NSSetは、受信された述語を評価することによって戻りfilteredArrayUsingPredicate不変セットを、そのメソッドが存在し得る
 38である      ;にNSArrayは配列= [NSArrayの配列] *
 39       ;:[bobPredicateアレイfilteredArrayUsingPredicate]
 40       NSSet * SET = [NSSet SET];
 41である      [セットfilteredSetUsingPredicate:bobPredicate];
 42は      
43である      NSMutableArrayの&NSMutableSet、方法はfilterUsingPredicateを使用することができる、変数セット:FALSEに述語評価さを実行することによって除去することが転送されてもよいオブジェクト
 44      * = TempArray NSMutableArrayの[NSMutableArrayの配列]、
 45       [tempArray filterUsingPredicate:bobPredicate];
 46である      NSMutableSet TEMPSET * = [SET NSMutableSet];
 47       [TEMPSET filterUsingPredicate:bobPredicate];
 48       NSDictionaryのは、そのキーと値のフィルタ述語を使用することができる(両方我々は)NSArrayのオブジェクトです。NSOrderedSetはNSArrayのNSSetまたは新しい順序付きセットをフィルタリングすることによって生成することができる、または単にremoveObjectsInArrayできる:、NSMutableSetフィルタ述語の否定を通過する
 49       
50       コアNSPredicate使用データ
 51である      NSFetchRequest述語を指定することができる特性を有しています管理オブジェクトは、論理的な条件を取得する必要があります。利用条件述語が等しくここで適用する、唯一の違いはなく、メモリにフィルタとして設定されているよりも、管理オブジェクト環境において、永続ストアアシスタント(永続ストアコーディネータ)によって評価述語ということです。
52       * / 
53      
54      // 述語構文
 55を     //代替的に
 56      @ %@オブジェクトに代わるものは、数字または日付の文字列がある、%Kキーパスに代わる
57れる     
58      NSPredicate ageIs33Predicate * = [NSPredicate predicateWithFormatは:@「%K%= @ @ " 年齢" @、33がある];
 59      // [ "チャーリー・スミス"] 
60      のNSLog("@ 33歳です:%@ " 、[人filteredArrayUsingPredicate:ageIs33Predicate]);
 61はある     // $ VARIABLE_NAMEはNSPredicate -predicateWithSubstitutionVariablesことができます。置き換えます値。
62      NSPredicate * namesBeginningWithLetterPredicate = [NSPredicate predicateWithFormat:@ "(firstNameのBEGINSWITH [CD] $レター)OR(lastNameのBEGINSWITH [CD]手紙$)" ];
 63は     // ["アリス・スミス""アルバーツクエンティン"] 
64      のNSLog(@" 'A'の名称:%@ "、 [filteredArrayUsingPredicate人:[namesBeginningWithLetterPredicate predicateWithSubstitutionVariables:{@ @ " 文字""@ " }]]);
 65 66 / * 67      の基本的な比較
 68      =、==式は左右に等しい
 69      、=> =>より大きいまたは式の左から右への式に等しい
 70      <右以下の式の左側に=、= <式
 71      >
右側の式の左側の発現はより大きく、 72     
     
           左の<式少ない右側の発現よりも
 73       !左側に=、<>式が右側の式に等しくない
 74       
75       を挟んで左右の式の値の上での発現に等しいBETWEEN。右側の列の数上部指定2つの値の下限値(指定された順序で、列の数)です。実施例1 {0.33}、または{$ LOWER、$ BETWEEN¥入力との間に
 UPPER}。76       
77       基本的な化合物述語
 78       論理積AND、&&
 79       OR、論理OR ||
 80       論理否定ではないが、!
 81       
82       文字列の比較
 83       文字列比較のデフォルトのケースでは、大文字と小文字は区別トーンです。あなたがCとDは、指定された演算子に対応した括弧内のキーの文字を変更することができ、大文字と小文字が区別やピッチ、ではありません
 84       BEGINSWITH:スタートとして、左から右に式expression
 85       含まれています。右に左に表現を含み式
 86       EndsWith:エンドとして表現の左から右への式
 87       のように:左の式は、式の右側に等しいです:?*はワイルドカードとして使用することができますか?マッチ1つの文字、*マッチゼロ以上の文字
88       一致する:左スタイルICU v3の正規表現の比較に発現、右側の式はと等しい
 89       
90       合計動作
 91はある      動作に関係1
 92       次の式の任意の要素を指定するいくつかのいずれか。例えば、ANY children.age <18。A
 93       
94       * / 
95 }

カスタムPersonクラス

1つ の#import <ファンデーション/ Foundation.h>
 2  
3  @interface 人:NSObjectの
 4  
5 @property(非アトミックコピー)NSStringの* のfirstName。
6 @property(アトミック、コピー)NSStringの* lastNameの。
7 @property(アトミック、強い)のNSNumber * 年齢。
8  
9  @end
1つ の#import  " Person.h " 
2  
3  @implementation 4  
5 - (NSStringの* )説明{
 6      リターン [NSStringのstringWithFormat:@ " %@%@ " 、self.firstName、self.lastName]。
7 }

おすすめ

転載: www.cnblogs.com/wanli-leon/p/12149096.html