除了判断语句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
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
除了判断语句if switch 我们还可以怎么做?-b的更多相关文章
- 选择判断语句(switch)
选择判断语句(switch) 一.switch语句格式 switch(表达式){ case 取值1: 执行语句: break: case 取值2: 执行语句: break: …... defau ...
- java基础2 判断语句:if ... else 语句和 switch 语句
一.if ... else 判断语句 1.if ... else 判断语句的格式 1.1.格式一 if(判断条件){ 执行不满足条件的语句 } 1.2.格式二 if(判断语句){ 满足条件的语句 }e ...
- Interview----求 1+2+...+n, 不能用乘除法、for、while if、else、switch、case 等关键字以及条件判断语句 (A?B:C)
题目描述: 求 1+2+...+n, 要求不能使用乘除法.for.while.if.else.switch.case 等关键字以及条件判断语句 (A?B:C). 分析: 首先想到的是写递归函数,但是遇 ...
- Java学习之分支结构---判断语句:if语句和switch语句
一个if语句包含一个布尔表达式和一条或多条语句,if 语句的用语法如下:if 语句 if(布尔表达式) { //如果布尔表达式为true将执行的语句 },如果布尔表达式的值为 true,则执行 if ...
- 剑指offer47:位运算+递归。求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
1 题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 2 思路和方法 (1)递归,不能使用if等 ...
- 判断语句的嵌套和switch判断
Scanner scanner = new Scanner(System.in);int i = scanner.nextInt();int i2 = scanner.nextInt();if (i& ...
- if语句,if...else if语句和switch...case语句的区别和分析
前段时间在工作中遇到了一个关于条件判断语句的问题,在if语句,if else if语句和switch case语句这三者之间分析,使用其中最有效率的一种方法. 所以就将这个问题作为自己第一篇博客的主要 ...
- java 判断语句和循环语句
一.判断语句:if和switch if(关系表达式1) { 语句体1; }else if (关系表达式2) { 语句体2; }…else { 语句体n+; } switch(表达式) { case 值 ...
- 前端笔记知识点整合之JavaScript(三)关于条件判断语句、循环语句那点事
一.条件分支语句 条件分支语句,也叫作条件判断语句,就是根据某种条件执行某些语句,不执行某些语句. JS中有三种语法是可以表示条件分支的 1.1 if……else…… 条件分支的主力语法,这个主力 ...
随机推荐
- debugfs恢复文件
echo "this is test" >xx debugfs: ls -d /root/test1 () . () .. () xx <> () test.c ...
- Centos下的IO监控与分析
近期要在公司内部做个Linux IO方面的培训, 整理下手头的资料给大家分享下 各种IO监视工具在Linux IO 体系结构中的位置 源自 Linux Performance and Tuni ...
- 阿里技术保障-KeepAlive
http://blog.sina.cn/dpool/blog/s/blog_e59371cc0102ux5w.html?wm=3049_a111
- iOS开发中常见的语句@synthesize obj=obj的意义详解
我们在进行iOS开发时,经常会在类的声明部分看见类似于@synthesize window=_window; 的语句,那么,这个window是什么,_ window又是什么,两个东西分别怎么用,这是一 ...
- oracle学习----特殊的连接方式
1.笛卡儿积 merge join cartesion SQL> select ename,dname from emp,dept; 已选择56行. 执行计划------------------ ...
- Java实现堆排序
import java.util.Scanner; /*堆是一种数据结构,类似于一棵完整的二叉树. * 思想:堆的根节点值最大(最小),将无序序列调整成一个堆,就能找出这个序列的最大值(最小值),将找 ...
- java 用eclipse j2ee写的servlet 程序,WEB-INF下的配置文件web.xml在哪啊?谢谢!
我用的版本是tomcat7.0,在webcontent\web-inf里只有一个空文件夹lib,写完servlet 类程序,就可以运行了,我想知道自动生成的配置文件在哪里?或者说从哪里能够看出来配置内 ...
- select random item with weight 根据权重随机选出
http://eli.thegreenplace.net/2010/01/22/weighted-random-generation-in-python/ 类似俄罗斯轮盘赌
- C#删除微信自定义菜单
删除 string access_token = "你的token"; string posturl = "https://api.weixin.qq.com/cgi-b ...
- iOS 项目中将 http 改成 https 后需要改动的地方(密钥验证)
这种是不验证证书的密钥 AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone] ...