iOS之走进精益编程01
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的更多相关文章
- [C#] 走进异步编程的世界 - 开始接触 async/await(转)
原文链接:http://www.cnblogs.com/liqingwen/p/5831951.html 走进异步编程的世界 - 开始接触 async/await 序 这是学习异步编程的入门篇. 涉及 ...
- [C#] 走进异步编程的世界 - 开始接触 async/await
走进异步编程的世界 - 开始接触 async/await 序 这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async/await,但在控制台输出示例时经常会采用 C# 6.0 的 $&qu ...
- [C#] 走进异步编程的世界 - 剖析异步方法(上)
走进异步编程的世界 - 剖析异步方法(上) 序 这是上篇<走进异步编程的世界 - 开始接触 async/await 异步编程>(入门)的第二章内容,主要是与大家共同深入探讨下异步方法. 本 ...
- [C#] 走进异步编程的世界 - 剖析异步方法(下)
走进异步编程的世界 - 剖析异步方法(下) 序 感谢大家的支持,这是昨天发布<走进异步编程的世界 - 剖析异步方法(上)>的补充篇. 目录 异常处理 在调用方法中同步等待任务 在异步方法中 ...
- [C#] 走进异步编程的世界 - 在 GUI 中执行异步操作
走进异步编程的世界 - 在 GUI 中执行异步操作 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5877042.html 序 这是继<开始接 ...
- 并发编程 01—— ThreadLocal
Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...
- 走进异步编程的世界 - 开始接触 async/await
[C#] 走进异步编程的世界 - 开始接触 async/await 走进异步编程的世界 - 开始接触 async/await 序 这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async ...
- iOS开发资源整理【01】
一.网站 Code4App 开发者常用库分享网站 GitHub git是一个优秀的分布式版本控制系统 stackoverflow 技术在线问答网站 CocoaChi ...
- iOS开发Swift篇(01) 变量&常量&元组
iOS开发Swift篇(01) 变量&常量&元组 说明: 1)终于要写一写swift了.其实早在14年就已经写了swift的部分博客,无奈时过境迁,此时早已不同往昔了.另外,对于14年 ...
随机推荐
- ios项目记录
1,如何隐藏状态栏 在基类中重载UIViewController.h中的这个方法 - (BOOL)prefersStatusBarHidden { // iOS7后,[[UIApplication s ...
- 图解CISCO 3550忘记密码解决方法
图解CISCO3550忘记密码解决方法 Cisco网络设备密码忘记怎么初始出厂默认值?这时网友常常会提出的问题,怎么解决,有人说啦,去百度去谷歌一下不就行啦,然而这对初学者任是个挑战,虽然步骤只有简单 ...
- PAT1015. Reversible Primes
//题的理解是n在基数b中的的表示中,正序和逆序值都是素数,但是其实可直接判断n,因为n在b中的正常序列值就是再换成十进制就是n,但是不A:不知道为什么 用笨方法,先把n展开成b进制,正常计算其实是翻 ...
- yiStack平台维护
<一.> yiStack 二次封装 Iso通用发行版相关配置属性值替换1.1.yiStack AIO一体机环境根据部署子网替换修改示例如下:主要修改替换isolinux/ks-aio.cf ...
- JMeter笔记4:测试结果-聚合报告的字段说明
1.Lable :定义 HTTP 请求名称2.Samples :表示这次测试中一共发出了多少个请求3.Average :平均响应时长---默认情况下是单个Request的平均响应时长,当使用Trans ...
- Linux下切换用户
0x01 使用命令[su username] 这种方法能切换普通用户和root用户 0x02 从普通用户切换到root用户,还可以使用命令[sudo su] 0x03 su 是switch user的 ...
- ngrok逆向代理服务器搭建微信公众号本地开发环境
一条命令解决的外网访问内网问题 本地WEB外网访问.本地开发微信.TCP端口转发 平台登陆地址:http://www.ngrok.cc/login 新版本上线启动方式更简单使用视频教程 在路由器上面的 ...
- 二十一、contextMap中放的常用数据
二十一.contextMap中放的常用数据 request:请求范围的数据.即ServletRequest中的那个Map parameters:请求参数的数据.即request.getParamete ...
- android版猜拳游戏源码分享
android版猜拳游戏源码分享安卓版猜拳游戏源码,该文件中带有安装测试包的,这个游戏源码比较简单的,现在有两个代码,一个自定义VIEW的,一个就是普通的imageView图片,游戏非常适合一些新手的 ...
- Linux使用有线上网教程
本人亲测Linux(Ubuntu kylin 14.04)有线上网方法,下面是步骤: 一,运行Terminal(终端),输入 sudo pppoeconf 命令,设置账号和密码后,其他的全选yes ...