除了判断语句if switch 我们还可以怎么做?-b

之前项目中有根据后台数据执行不同代码,根据不同的字符串返回不同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;

}

我们项目中使用的是第二种方法,个人觉得这样对性能和代码整洁有很大的帮助,有错误或者不妥的地方也欢迎指正。

文/哈尔湖(简书作者)
原文链接:http://www.jianshu.com/p/e51c6af6025c
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-10-03 06:45:18

除了判断语句if switch 我们还可以怎么做?-b的相关文章

js中的if判断语句和switch条件分支语句

语句是js中最重要的成分 本文想介绍的是if判断语句和switch条件分支语句 ---------------------------------------------------------------- if条件判断语句 形式: if(条件判断){ 表达式 } 意思就是,当满足条件判断的句子,执行花括号内的表达式 直接看看有坑的地方 需求:当score为60分以下,控制台打印不及格,当score为60分以上,控制台打印及格,当score为85分以以上,控制台打印优秀 var score =

题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)

题目:求1+2+…+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字以及条件判断语句(A?B:C). 分析:这道题没有多少实际意义,因为在软件开发中不会有这么变态的限制.但这道题却能有效地考查发散思维能力,而发散思维能力能反映出对编程相关技术理解的深刻程度. 通常求1+2+…+n除了用公式n(n+1)/2之外,无外乎循环和递归两种思路.由于已经明确限制for和while的使用,循环已经不能再用了.同样,递归函数也需要用if语句或者条件判断语句来判断是继续

条件判断语句 if语句/switch语句

if(条件表达式)语句 if语句即条件判断语句,对于if语句括号里的表达式,ECMAScript会自动调用Boolean()转型函数将这个表达式的结果转换成一个布尔值.如果值为true,执行后面的一条语句,否则不执行 <script type="text/javascript"> var box = 100; if (box > 50) //if 语句里的表达式如果返回的false,只会不执行后面的一条语句 alert(box); //第二条语句,和if语句无关,所以

求 1+2+...+n, 要求不能使用乘除法、for、while、if、else、switch、case 等关键字以及条件判断语句 (A?B:C)。

求 1+2+...+n,要求不能使用乘除法.for.while.if.else.switch.case 等关键字以及条件判断语句 (A?B:C). #include <bits/stdc++.h> using namespace std; int Sum(int n) { int Ret = 0; n == 0 || (Ret = Sum(n-1)); return n + Ret; } class A{ public: A() { sum += ++n; } static int sum;

有两个变量a和b,不用“if”、“? :”、“switch”或其他判断语句,找出两个数中比较大的

1.问题 There are two int variables: a and b, don't use "if"."? :"."switch" or other judgement statement, find out the biggest one of the two numbers. (有两个变量a和b,不用"if"."? :"."switch"或其他判断语句,找出两个数中比较

求1+2+3+...+n的值,要求不能使用乘除法,for、while、if、else、switch、case、等关键字及条件判断语句(JAVA)

采用递归和三目表达式注意红色字体一定不能写成n-- 1 package com.hunag; 2 3 public class Sum { 4 5 static int sum; 6 public static int isum(int n) 7 { 8 sum+=n; 9 sum=n==0?sum:isum(--n); 10 System.out.println(n); 11 return sum; 12 } 13 public static void main(String[] args)

C#开发Unity游戏教程之判断语句

C#开发Unity游戏教程之判断语句 游戏执行路径的选择--判断 玩家在游戏时,无时无刻不在通过判断做出选择.例如,正是因为玩家做出的选择不同,才导致游戏朝着不同的剧情发展,因此一个玩家可以对一个游戏百玩不厌!既然提到了这一点,借此机会本章就来说明,在脚本中实现游戏为玩家提供更多选择的方法. Unity游戏的执行路径 游戏如此受玩家欢迎的原因,除了优质的画面效果以外,就是游戏的可交互性.也就是说,游戏是可以与玩家互动的,这也是游戏与视频的不同之处.游戏允许玩家在一定程度上控制游戏的执行路径,虽然

sas条件判断语句

if语句<可执行语句> data b; set sashelp.class; if _n_ le 4; *如果if为真,则继续执行if后面的语句,最后输出满足if的条件的观测,如果if为假则立刻返回到data步开头继续执行下一条set语句; y = 'now'; /* y = 'now'; if _n_ le 4;也能得出同样的结果,但是效率相对来说较低,因为要重复执行y的赋值语句 */ run; if的另外两种格式if x=3 then y=4; 对于要表达的只有一条数据就用thenif x

慕课网-安卓工程师初养成-4-6 Java条件语句之 switch

来源:http://www.imooc.com/code/1358 当需要对选项进行等值判断时,使用 switch 语句更加简洁明了.例如:根据考试的名次,给予前 4 名不同的奖品.第一名,奖励笔记本一台:第二名,奖励 IPAD 2 一个:第三名,奖励移动电源一个:最后一名奖励 U 盘一个. 语法:  执行过程:当 switch 后表达式的值和 case 语句后的值相同时,从该位置开始向下执行,直到遇到 break 语句或者 switch 语句块结束:如果没有匹配的 case 语句则执行 def