Model类

.h

#import <Foundation/Foundation.h>

@interface Product : NSObject

@property (nonatomic,assign) NSNumber *weight;

@property (nonatomic,copy)   NSString *color;

@end

.m

无增加内容

viewcontroller.h

@interface ColorSpec :NSObject

@property (nonatomic, copy) NSString *color;

@end

@implementation ColorSpec

+ (instancetype)specWithColor:(NSString *)color

{

ColorSpec *spec = [[ColorSpec alloc] init];

spec.color = color;

return spec;

}

- (BOOL)satisfy:(Product *)product

{

return [product.color isEqualToString:_color];

}

@end

@interface BelowWeightSpec :NSObject

@property (nonatomic, assign) int limit;

@end

@implementation BelowWeightSpec

+ (instancetype)specWithBelowWeight:(float)limit

{

BelowWeightSpec *spec = [[BelowWeightSpec alloc] init];

spec.limit = limit;

return spec;

}

- (BOOL)satisfy:(Product *)product

{

return ([product.weight intValue] < _limit);

}

@end

@interface ViewController ()

{

NSMutableArray *_datas;

}

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

[self setupModel];

}

- (void)setupModel{

_datas = [[NSMutableArray alloc]init];

for (int i = 0; i < 1000 ; i ++) {

Product *product = [Product new];

product.weight = [NSNumber numberWithInt:i%11];

product.color  = [self getColorWithInt:i];

[_datas addObject:product];

}

}

- (NSString *)getColorWithInt:(int)index{

switch (index%9) {

case 0:

{

return @"GREEN";

}

break;

case 1:

{

return @"BLACK";

}

break;

case 2:

{

return @"RED";

}

break;

case 3:

{

return @"WHIRT";

}

break;

case 4:

{

return @"GRAY";

}

break;

case 5:

{

return @"LIGHT";

}

break;

case 6:

{

return @"ORANGE";

}

break;

case 7:

{

return @"BLUE";

}

break;

case 8:

{

return @"YELLOW";

}

break;

default:

break;

}

return nil;

}

// 01.在仓库里找到所有颜色为红色的产品

- (NSArray *)findAllRedProducts:(NSArray *)products{

NSMutableArray *list = [@[]mutableCopy];

for (Product *obj in products) {

if ([obj.color isEqualToString:@"RED"]) {

[list addObject:obj];

}

}

return list;

}

// 02.在仓库中查找所有颜色为绿色的产品<参数化设置>

- (NSArray *)findProducts:(NSArray *)products byColor:(ColorSpec *)color

{

NSMutableArray *list = [@[] mutableCopy];

for (Product *product in products) {

if ([color satisfy:product]) {

[list addObject:product];

}

}

return list;

}

// 03.查找所有重量小于10的所有产品

- (NSArray *)findProducts:(NSArray *)products bySpec:(BelowWeightSpec *)spec

{

NSMutableArray *list = [@[] mutableCopy];

for (Product *product in products) {

if ([spec satisfy:product]) {

[list addObject:product];

}

}

return list;

}

- (IBAction)findREDClick:(UIButton *)sender {

NSArray *redArr = [self findProducts:_datas byColor:[ColorSpec specWithColor:@"RED"]];

NSLog(@"---- all RED :%tu",redArr.count);

NSArray *greenArr = [self findProducts:_datas byColor:[ColorSpec specWithColor:@"GREEN"]];

NSLog(@"---- all GREEN :%tu",greenArr.count);

NSArray *small10Arr = [self findProducts:_datas bySpec:[BelowWeightSpec specWithBelowWeight:10]];

NSLog(@"---- all < 10 : %tu",small10Arr.count);

}

iOS之走进精益编程01的更多相关文章

  1. [C#] 走进异步编程的世界 - 开始接触 async/await(转)

    原文链接:http://www.cnblogs.com/liqingwen/p/5831951.html 走进异步编程的世界 - 开始接触 async/await 序 这是学习异步编程的入门篇. 涉及 ...

  2. [C#] 走进异步编程的世界 - 开始接触 async/await

    走进异步编程的世界 - 开始接触 async/await 序 这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async/await,但在控制台输出示例时经常会采用 C# 6.0 的 $&qu ...

  3. [C#] 走进异步编程的世界 - 剖析异步方法(上)

    走进异步编程的世界 - 剖析异步方法(上) 序 这是上篇<走进异步编程的世界 - 开始接触 async/await 异步编程>(入门)的第二章内容,主要是与大家共同深入探讨下异步方法. 本 ...

  4. [C#] 走进异步编程的世界 - 剖析异步方法(下)

    走进异步编程的世界 - 剖析异步方法(下) 序 感谢大家的支持,这是昨天发布<走进异步编程的世界 - 剖析异步方法(上)>的补充篇. 目录 异常处理 在调用方法中同步等待任务 在异步方法中 ...

  5. [C#] 走进异步编程的世界 - 在 GUI 中执行异步操作

    走进异步编程的世界 - 在 GUI 中执行异步操作 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5877042.html 序 这是继<开始接 ...

  6. 并发编程 01—— ThreadLocal

    Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...

  7. 走进异步编程的世界 - 开始接触 async/await

    [C#] 走进异步编程的世界 - 开始接触 async/await   走进异步编程的世界 - 开始接触 async/await 序 这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async ...

  8. iOS开发资源整理【01】

    一.网站 Code4App         开发者常用库分享网站 GitHub        git是一个优秀的分布式版本控制系统 stackoverflow    技术在线问答网站 CocoaChi ...

  9. iOS开发Swift篇(01) 变量&常量&元组

    iOS开发Swift篇(01) 变量&常量&元组 说明: 1)终于要写一写swift了.其实早在14年就已经写了swift的部分博客,无奈时过境迁,此时早已不同往昔了.另外,对于14年 ...

随机推荐

  1. android 3D旋转效果实现

    一说到3D,可能第一反应就是使用OpenGL ES....但是,实现这么个小功能,要动用这玩意,莫名的恐惧啊!!!!至今也没弄明白这个怎么玩... 好吧,幸亏还有个Camera类可以帮助我们,据说底层 ...

  2. Linux选型:开源不是免费 首选红帽和SUSE

    首发:http://tech.it168.com/a2014/0324/1606/000001606245.shtml 企业级服务器系统选型报告:http://www.it168.com/redian ...

  3. tty -s && mesg n

  4. OpenGL函数解析之gluPerspective()

    函数原型: void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar); 参数说明: fovy:指定 ...

  5. SQL 数据库 复制 与订阅 实现数据同步

    摘自: http://www.jb51.net/article/18039.htm

  6. 2.2安装JDK

    在Ubuntu下安装JDK的步骤: (1)首先需要自己安装的Ubuntu系统是多少位的,可以使用命令[getconf LONG_BIT]获取这个信息: (2)在JDK官网下载相应(选取和Linux系统 ...

  7. Android IOS WebRTC 音视频开发总结(六)-- iOS开发之含泪经验

    前段时间在搞webrtc iOS开发,所以将标题改为了Android IOS WebRTC 音视频开发总结, 下面都是开发过程中的经验总结,转载请说明出处(博客园RTC.Blacker): 1. IO ...

  8. 关于ADO.NET的基本介绍

    关于ADO.NET ADO.NET是微软提供的一种数据库访问方式.他使得.NET程序员对于不同的数据库都能采用相同的访问方式. Connection 连接 Connection是一个数据库连接类,他负 ...

  9. 使用BootStrap制作用户登录UI

    先看看劳动成果 布局 左右各一半(col-md-6) 左侧登录框占左侧一半的10/12 右侧是登录系统的注意事项 使用到的BootStrap元素 well 输入框组(input-group) 按钮(b ...

  10. nodejs前端自动化构建

    http://99jty.com/?p=1257 http://www.jankerli.com/?p=1628 http://www.cnblogs.com/zhepama/archive/2013 ...