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. 内存泄漏检测工具Valgrind

    1概述 1.1 介绍 Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合.Valgrind由内核(core)以及基于内核的其他调试工具组成.内核类似于一个框架(fram ...

  2. eclipse中logcat偶尔不显示log的问题解决办法

    Android开发过程中  eclipse 经常会出现 logcat突然就是不现实log的情况.经常遇到,一直没有解决.后来解决了,记录一下. 默认的设置是error 改成verbos 问题解决.

  3. json 對象的序列化

    var a={x:1,y:2} s=JSON.stringify(a); //s="{"x":1,"y":2}" p=JSON.parse( ...

  4. windows svn

    1.1Svn和VisualSvn介绍 VisualSvn Server2.5.6(版本控制服务器)免费开源软件 是基于Windows平台上的Subversion服务器,它是免费的 官方下载: http ...

  5. jquery selector 使用方法

    <select class="selector"></select> 1 设置value为pxx的项选中 $(".selector"). ...

  6. angular.extend(dst, src)对象拓展

    angular.extend(dst, src) 作用:对象的拓展 参数:  dst:拓展的对象 src:源对象 返回值:拓展的对象 var dst = {name: 'xxx', country: ...

  7. static 在多台下的特性

    被static修饰的方法不具备多台的特性,因为这个时候,该方法已经不具备"后期绑定"的性质了,也就是说,基类的引用就算指向导出类,调用的static的方法还是用基类的. 如果要调用 ...

  8. 二、搭建struts2的开发环境

    二.搭建struts2的开发环境 下载地址:http://struts.apache.org 解压后的目录结构: apps:框架本身提供一些案例(学习) docs:框架本身提供的文档(指南和API). ...

  9. 2. XAML

    1. 什么是 XAML XAML 可以说是 XML 的一个特殊子集,使用相同的语法,只是 XML 可以自定义任何的节点和属性,但 XAML 是有所限制的,只能在规定的命名空间下使用. 2. names ...

  10. 使用eclipse与jLink V8调试exynos 4412 u-boot

    /** ****************************************************************************** * @author    Maox ...