'寫在前面的話'
這些是我對iOS面試時會碰到的問題的解決方法,整理出來分享給大家,有些錯誤不要
笑了,希望對大家有所幫助。大家有更好的解決辦法也歡迎溝通交流。
一直以來都有寫點兒東西的想法,就從筆記、從閱讀開始吧,加油!'
Cocoa 提供了一個類 NSPredicate 類,該類主要用于指定過濾器的條件,該對象可以準確的描述所需條件,對每個對象通過謂詞進行篩選,判斷是否與條件相匹配。謂詞表示計算真值或假值的函數。
NSPredicate *predicate;
predicate=[NSPredicatepredicateWithFormat:@"name=='Herbie'"];//用predicateWithFormat創建一個謂詞,name作為鍵路徑
BOOL match=[predicateevaluateWithObject:car];//car作為接收對象,evaluateWithObject返回一個bool值。
NSLog(@"%s",(match)?"YES":"NO");
predicate = [NSPredicatepredicateWithFormat:@"engine.horsepower > 150"];
NSArray *cars = [garage cars];
for (Car *car in [garage cars]) {
if ([predicate evaluateWithObject: car]) {
NSLog (@"%@", car.name);
}
}
遍歷cars判斷是否是真,然后輸出。
predicate = [NSPredicatepredicateWithFormat:@"engine.horsepower > 150"];
NSArray *results;
results = [carsfilteredArrayUsingPredicate: predicate];//它將循環過濾數組內容,根據謂詞計算每個對象的值,并將值為YES的對象累計到將被返回的新數組中。
NSLog (@"%@", results);
filteredArrayUsingPredicate這個方法可以得到我們所需要的值。加上
NSArray *names;
names=[results valueForKey:@"name"];
NSLog (@"%@", names);
就和上面的值一樣。
NSMutableArray *carsCopy = [carsmutableCopy];
[carsCopyfilterUsingPredicate: predicate];//filterUsingPredicate和NSMutableArray構成新數組。
NSLog (@"%@", carsCopy);
predicate = [NSPredicatepredicateWithFormat:@"engine.horsepower > %d", 50];
results = [cars filteredArrayUsingPredicate: predicate];
NSLog (@"%@", results);
NSPredicate *predicateTemplate;
NSDictionary *varDict;
predicateTemplate = [NSPredicatepredicateWithFormat: @"engine.horsepower > $POWER"];//創建一個鍵/值字典來存儲,這里$符號用于變量
varDict = [NSDictionarydictionaryWithObjectsAndKeys:
[NSNumbernumberWithInt: 150],@"POWER", nil];//@后面參數名
predicate = [predicateTemplatepredicateWithSubstitutionVariables: varDict];
results = [cars filteredArrayUsingPredicate: predicate];
NSLog (@"%@", results);
predicate = [NSPredicatepredicateWithFormat:
@"(engine.horsepower > 50) AND (engine.horsepower < 200)"];//可以運用運算符
results = [cars filteredArrayUsingPredicate: predicate];
NSLog (@"oop %@", results);
predicate = [NSPredicatepredicateWithFormat:
@"engine.horsepower BETWEEN { 50, 200 }"];//這里可以運用between關鍵字。和上面效果一樣
results = [cars filteredArrayUsingPredicate: predicate];
NSLog (@"%@", results);
NSArray *betweens = [NSArray arrayWithObjects:
[NSNumbernumberWithInt: 50], [NSNumbernumberWithInt: 200],nil];
predicate = [NSPredicatepredicateWithFormat: @"engine.horsepower BETWEEN %@", betweens];
results = [cars filteredArrayUsingPredicate: predicate];
NSLog (@"%@", results);
predicateTemplate = [NSPredicatepredicateWithFormat:@"engine.horsepower BETWEEN $POWERS"];
varDict = [NSDictionarydictionaryWithObjectsAndKeys: betweens, @"POWERS", nil];
predicate = [predicateTemplatepredicateWithSubstitutionVariables: varDict];//用變量
results = [cars filteredArrayUsingPredicate: predicate];
NSLog (@"%@", results);
predicate = [NSPredicatepredicateWithFormat:@"name < 'Newton'"];//不等號不僅可以用于數字,也可以用于字符串值。
results = [cars filteredArrayUsingPredicate: predicate];
NSLog (@"%@", [results valueForKey: @"name"]);
predicate = [NSPredicatepredicateWithFormat:@"name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];//包含在其中用IN
results = [cars filteredArrayUsingPredicate: predicate];
NSLog (@"%@", [results valueForKey: @"name"]);
predicate = [NSPredicatepredicateWithFormat:@"SELF.name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];//self關鍵字
results = [cars filteredArrayUsingPredicate: predicate];
NSLog (@"%@", [results valueForKey: @"name"]);
names = [cars valueForKey: @"name"];
predicate = [NSPredicatepredicateWithFormat:@"SELF IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];//self關鍵字
results = [namesfilteredArrayUsingPredicate: predicate];
NSLog (@"%@", results);
```
predicate = [NSPredicatepredicateWithFormat:@"name BEGINSWITH 'Bad'"];//字符串運算符BEGINSWITH,ENDSWITH,CONTAINS[c][d][cd]
results = [cars filteredArrayUsingPredicate: predicate];
NSLog (@"%@", results);
BEGINSWITH:檢查某個字符串是否以另一個字符串開頭。
ENDSWITH:檢查某個字符串是否以另一個字符串結尾。
CONTAINS:檢查某個字符串是否以另一個字符串內部。
[c]不區分大小寫[d]不區分發音符號即沒有重音符號[cd]既不區分大小寫,又不區分發音符號。
代表通配符Like還接受[cd].下面所示↓
predicate = [NSPredicatepredicateWithFormat:@"name LIKE[cd] '*er*'"];//*
results = [cars filteredArrayUsingPredicate: predicate];
NSLog (@"%@", results);
只匹配一個字符并且還可以接受[cd].下面所示↓
predicate = [NSPredicatepredicateWithFormat:@"name LIKE[cd] '???er*'"];
results = [cars filteredArrayUsingPredicate: predicate];
NSLog (@"%@", results);
還可以使用MATCHES運算符。賦給該運算符一個正則表達式。
iOS 謂詞(NSPredicate)的應用
Cocoa實際開發中可以是使用NSPredicate及其父類NSComparisonPredicate和NSCompoundPredicate.其風格類似于SQL查詢語言和正則表達式的混合體,提供了具有表現力的,自然語言界面來定義一個集合被搜尋的邏輯條件。一般來說稍微操作過數據庫基本上很容易理解其中的方法,至于使用的方法也很簡單。如下代碼是實現方法:
// BIDValidateMgr.h
// TongHuiShop
//
// Created by eJiupi on 14-10-29.
// Copyright (c) 2020年 xujinzhong. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface BIDValidateMgr : NSObject
//手機號碼驗證
+ (BOOL)validateMobile:(NSString *)mobile;
//郵箱
+ (BOOL)validateEmail:(NSString *)email;
//身份證號
+ (BOOL)validateIdentityCard: (NSString *)identityCard;
@end
BIDValidateMgr.m 實現代碼;
//
// BIDValidateMgr.m
// TongHuiShop
//
// Created by eJiupi on 14-10-29.
// Copyright (c) 2014年 xujinzhong. All rights reserved.
//
#import "BIDValidateMgr.h"
@implementation BIDValidateMgr
//手機號碼驗證
+ (BOOL)validateMobile:(NSString *)mobile
{
//手機號以13, 15,18開頭,八個 \d 數字字符
NSString *phoneRegex = @"^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$";
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex];
return [phoneTest evaluateWithObject:mobile];
}
//郵箱
+ (BOOL)validateEmail:(NSString *)email
{
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTest evaluateWithObject:email];
}
//身份證號
+ (BOOL)validateIdentityCard: (NSString *)identityCard
{
BOOL flag;
if (identityCard.length <= 0) {
flag = NO;
return flag;
}
NSString *regex2 = @"^(\\d{14}|\\d{17})(\\d|[xX])$";
NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2];
return [identityCardPredicate evaluateWithObject:identityCard];
}
@end
iOS 謂詞(NSPredicate)的簡單使用案列
以上就是我收集的有關ios謂詞的理解!!
不知各位有什么看法,歡迎留言互動交流,我們一起學習、一起進步!!
謝謝你長的這么好看,還關注我!!!點個贊唄!!
這就是"謂詞"相關的點,如果有什么不對的請留言提示,然后有什么別的需要改進的提示請聯系我我會及時補充~
over.over.
文章轉載于:https://www.cnblogs.com/chengzi1994/p/3347075.html