![](/img/trans.png)
[英]iOS how to extract command line arguments from string into NSDictionary in Objective-C?
[英]Objective-C how to parse command-line like arguments from a given string?
我正在使用 UISearchBar 處理 iOS 應用程序。 我想為用戶添加一個選項,以使用可以直接在搜索欄中輸入的輕量級搜索查詢,例如郵件應用程序。
例如,我希望能夠解析“Search Term last:week”並在我的數據中搜索“Search Term”並創建一個僅顯示過去 7 天的搜索過濾器。 如何解析來自 iOS String 的類似命令行的參數?
特別是,一旦我提取了我的令牌並驗證它們是有效的,我如何從搜索查詢中刪除它們而不影響查詢的其余部分?
這是我最初的嘗試。 是否有任何現成的工具可以用於此任務?
static NSString* whenKeyword = @"when";
static NSString* lastKeyword = @"last";
-(NSMutableDictionary*)findCommandsInQuery:(NSString*)query
{
//extract keywords from the query, like google mail search. We want to have commands like "cute puppies Last:month"
//remove extra whitespace, prepare to parse
NSString* dirtyString = [query stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSArray* tokens = [dirtyString componentsSeparatedByString:@":"];
//for each token, we want to trim it and remove illegal characters
NSMutableArray* cleanTokens = [[NSMutableArray alloc] initWithCapacity:tokens.count];
NSString* token = nil;
NSString* nextToken = nil;
NSString* cleanToken = nil;
for(int i = 0; i< tokens.count; i ++)
{
//get a token, for example "cute puppies last"
token = tokens[i];
NSArray* words = [token componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
if(words.count >0)
{
for(NSString* word in words)
{
cleanToken = [DataSource cleanTrimSearchTerm:word];
if(cleanToken.length > 0)
{
[cleanTokens addObject:cleanToken];
}
}
}else
{
cleanToken = nil;
}
}
//process tokens
NSMutableDictionary* commands = [NSMutableDictionary dictionary];
for(int i = 0; i< cleanTokens.count; i ++)
{
token = cleanTokens[i];
if(i+1 < cleanTokens.count)
{
nextToken = cleanTokens[i+1];
}
[self checkToken:token againstKeyword:whenKeyword withQuantifier:nextToken storeInDictionary:commands];
[self checkToken:token againstKeyword:lastKeyword withQuantifier:nextToken storeInDictionary:commands];
}
DLog(@"found commands: %@",commands);
return commands;
}
這是一種響應命令並使用它們創建搜索查詢的方法
-(void)processCommands:(NSMutableDictionary*)commands
{
NSString* value = commands[lastKeyword];
if(value != nil)
{
DLog(@"%@" ,value);
if([value isEqualToString:@"day"])
{
}else if ([value isEqualToString:@"week"])
{
}else if ([value isEqualToString:@"month"])
{
}else if ([value isEqualToString:@"quarter"])
{
}else if ([value isEqualToString:@"year"])
{
}
}
}
用戶通常不喜歡必須學習查詢語言。 這是一種復雜的用戶體驗。 有很多不同的方法可以簡化查詢和搜索,例如使用 UISearchController 的范圍欄或使用表視圖部分來划分信息。 但是,如果您仍然需要創建查詢機制,請嘗試實現您自己的抽象語法樹 (AST) 以避免意大利面條式代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.