除了判斷語句if switch 我們還可以怎么做?

? ? ? ?之前項目中有根據后臺數據執行不同代碼,根據不同的字符串返回不同UIViewController對象,最開始需要的vc 種類不多我用的是if else 做字符串比較再執行不同代碼,但是如果需求的vc 有幾十個,需要的恰好是最后一個呢?這樣if else if 代碼看起來混亂并且消耗資源。

?其實我們可以有兩種方法解決類似的判斷問題,

1,使用注冊機制。

2,直接使用網絡中的字符串調用方法。

一,注冊機制,我們只需要把代碼通過相應的字符串放入字典中,根據字符串取出相應的代碼運行得到結果,iOS中我們直接使block 存儲相應代碼。如下通過過for循環把不通的vc放入字典,

_dic=[[NSMutableDictionaryalloc]initWithCapacity:_arr.count];

for(int i =0; i <_arr.count; i++) {

NSString*key = [NSString ?stringWithFormat:@"%d",i];

UIViewController* (^block)()= ^(){

NSLog(@"這是第%d個",i);

UIViewController*viewc = [[UIViewController alloc] init];

viewc.view.backgroundColor= [UIColor colorWithRed:arc4random()%5/5.0 green:arc4random()%5/5.0 blue:arc4random()%5/5.0 alpha:1];

return viewc;

};

[_dic setObject:block forKey:key];

}

使用的時候這樣,取出block 運行block的到相應的vc?

-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath{

UIViewController* (^getblock)() = [_dic objectForKey:[NSString stringWithFormat:@"%d",indexPath.row]];

UIViewController*vc =getblock();

[self.navigationControllerpushViewController:vcanimated:YES];

二,直接通過字符串直接調用相應的方法,不過首先是要和后臺商量好格式。

//indexStr :是后臺數據,用來判斷執行的字符串。

NSString*selectStr = [indexStr stringByReplacingOccurrencesOfString:@"/"withString:@"_"];//替換使方法名合法

SEL select = NSSelectorFromString(selectStr) ;

if([self respondsToSelector:select]) {

UIViewController*vc = [self performSelector:select];

return vc;

} ?

例如后臺字符串傳來的是“shop/brand”,那么只需要添加方法

-(UIViewController*)shop_brand{

UIViewController*vc = [[UIViewController alloc]init];

NSLog(@"shop_brand");

return vc;

}

我們項目中使用的是第二種方法,個人覺得這樣對性能和代碼整潔有很大的幫助,有錯誤或者不妥的地方也歡迎指正。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • //設置尺寸為屏幕尺寸的時候self.window = [[UIWindow alloc] initWithFra...
    LuckTime閱讀 838評論 0 0
  • *7月8日上午 N:Block :跟一個函數塊差不多,會對里面所有的內容的引用計數+1,想要解決就用__block...
    炙冰閱讀 2,547評論 1 14
  • 工作了兩年多,一直有個“壞習慣”,就是將工作中遇到的一些問題、技巧或心得記在印象筆記里面,按理來說,作為一個...
    F森閱讀 2,050評論 3 26
  • 1、禁止手機睡眠[UIApplication sharedApplication].idleTimerDisabl...
    DingGa閱讀 1,144評論 1 6
  • 8. 副詞slightly不能修飾名詞,應該是slight increase, drop 9. 圖表作文一般用不到...
    Veronica小君君閱讀 169評論 0 0