AJ学IOS 之BLOCK的妙用_利用block实现链式编程
AJ分享,必须精品
一:场景
我们有个对象人,他有两个方法,一个是学习study,一个是跑步run,
这个人有个怪癖,跑完步之后必须学习,为了实现这个方法并且能调用方便,我们让跑步和学习都回返回自己这个对象作为下一次调用的快捷方式,代码如下:
调用:
int main(int argc, const char * argv[])
{
@autoreleasepool {
//初始化人
Person *p = [[Person alloc] init];
//调用
[[p study] run];
return 0;
}
人对象:
// Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
- (Person *)study;
- (Person *)run;
@end
// Person.m
#import "Person.h"
@implementation Person
- (Person *)study
{
NSLog(@"study----");
return self;
}
- (Person *)run
{
NSLog(@"run----");
return self;
}
@end
运行结果
二:block链式结构实现
调用:
int main(int argc, const char * argv[])
{
@autoreleasepool {
Person *p = [[Person alloc] init];
p.study(@"xx宝典").run().study(@"xx剪发");
}
return 0;
}
人对象:
//Person.h
@interface Person : NSObject
- (Person *(^)(NSString *name))study;
- (Person *(^)())run;
@end
//Person.m
@implementation Person
- (Person *(^)(NSString *))study
{
return ^(NSString *name){
NSLog(@"study----%@", name);
return self;
};
}
- (Person *(^)())run
{
return ^{
NSLog(@"run----");
return self;
};
}
@end
在这里面,我们
p.study(@”xx宝典”).run().study(@”xx剪发”);
调用study方法:p.study
执行block:p.study(@”xx宝典”)
结合person内部写的方法
- (Person *(^)(NSString *))study
{
return ^(NSString *name){
NSLog(@"study----%@", name);
return self;
};
}
明显可以看到,当执行p.study(@”xx宝典”)时候,内部是return一个返回值是person*类型(最后的return self)的block 这也就解释了为什么下一句可以继续连着用点来调用了。也就是说返回的是一段block,这段block里面又有返回值,返回值是person的对象self。
这里的参数有点晕,记住就好,用链式结构的block的巧妙用法,简单了解就好
执行结果
AJ学IOS 之BLOCK的妙用_利用block实现链式编程的更多相关文章
- iOS开发技巧系列---使用链式编程和Block来实现UIAlertView
UIAlertView是iOS开发过程中最常用的控件之一,是提醒用户做出选择最主要的工具.在iOS8及后来的系统中,苹果更推荐使用UIAlertController来代替UIAlertView.所以本 ...
- iOS利用block实现链式编程方法(Objective-C链式编程)
objc利用block实现链式编程方法 因为不好读.block和其他语言的匿名函数一样,很多程序员刚开始很难主动去用他. 本文描述block作为属性的实际使用,看懂block,并讲解如何利用block ...
- iOS:用Block写一个链式编程
一.介绍 链式编程是一个比较新颖的编程方式,简单直观,用起来也比较舒服.目前比较有名的Mansory和BabyBlueTooth就是使用链式编程写的第三方框架. 二.写法 链式编程写法不同于传统方式, ...
- 实现iOS中的链式编程
谈到链式编程,那Masonry几乎就是最经典的代表.如: make.top.equalTo(self.view).offset() 像这样top.equalTo(self.view).offset(6 ...
- iOS 开发之使用链式编程思想实现简单的计算器
链式编程思想是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好.例如 a(1).b(2).c(3). 链式编程思想最为关键的是,方法的返回值是block,block必须返回对 ...
- iOS 链式编程探索(Masonry)
看了几篇关于链式编程的文章,还是理解的不透彻,我想这可能是因为我自己对block掌握的不熟练. 我已经明白了,所以,和大家分享一下我的理解!如有问题,麻烦大家指出! 直接看代码吧!关键的注释都有. 我 ...
- ios的链式编程笔记
1.Masonry的语法为啥能连续的使用点语法? >> 底层使用的是:用block当函数的返回参数 > 链式编程思想 2. 使用block当函数的返回参数 // 之前开发中比较习惯 ...
- 第四十一篇、Masonry利用Block实现链式编程
一直都觉得使用Masonry的时候语法特别优雅,很早的时候就想尝试下怎么实现, 一直都没弄明白,直到最近看见一篇叫block实现链式编程的 1.方法的返回类型是代码块 >代码块的返回类型是该类的 ...
- (一一八)利用block实现链式编程
有些时候需要不断地调用方法,如果使用传统方案,需要拿到对象多次调用,例如有一个Ball对象,实现了up.down.left.right四个方法,分别控制球的运动方向,如果要实现球向右再向下,需要这么写 ...
随机推荐
- [前端开发]Vue组件化的思想
组件化的思想 将一个页面中的处理逻辑放在一起,处理起来就会很复杂,不利于后续管理和扩展. 如果将页面拆分成一个个小的功能块,每个功能块实现自己的内容,之后对页面的管理和维护就变得很容易了. 注册组件的 ...
- java web 获取 网页访问次数
ServletContext context = request.getServletContext(); /** * 从ServletContext中获取计数器对象 */Integer count ...
- c语言课程设计--图书/音乐管理系统
这个代码因为配置信息的原因不能直接整个拿去用(o゜▽゜)o☆ 这个代码因为配置信息的原因不能直接整个拿去用(o゜▽゜)o☆ 这个代码因为配置信息的原因不能直接整个拿去用(o゜▽゜)o☆ 只能提供一个思 ...
- BIT-Reverse Pairs
2019-12-17 11:07:02 问题描述: 问题求解: 本题可以看作是逆序数问题的强化版本,需要注意的是num[i] > 2 * num[j],这里有0和负数的情况. public in ...
- 数据源管理 | 主从库动态路由,AOP模式读写分离
本文源码:GitHub·点这里 || GitEE·点这里 一.多数据源应用 1.基础描述 在相对复杂的应用服务中,配置多个数据源是常见现象,例如常见的:配置主从数据库用来写数据,再配置一个从库读数据, ...
- 曹工说Spring Boot源码(27)-- Spring的component-scan,光是include-filter属性的各种配置方式,就够玩半天了.md
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- [问题]java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized...
java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized... 这个问题一般是因为升级MSYQL ...
- openssl生成rsa公私钥对并在java中使用
rsa著名的非对称加密算法,具体实现我也不是很清楚,大概先要了解一下密码学,有一定基础才能去看的东东,这里就先介绍怎么使用rsa为我们服务. 首先openssl这是个集成了众多加密算法的工具,它将这一 ...
- C 电压
时间限制 : 10000 MS 空间限制 : - KB 评测说明 : 1s,256m 问题描述 JOI社的某个实验室中有着复杂的电路.电路由n个节点和m根细长的电阻组成.节点被标号为1~N ...
- [教程]KALI LINUX 2.0 2019 更新国内源
2019年最新版本KALI 为 KALI 2019.1 下载地址:https://www.kali.org/downloads/ 有的新入门的朋友可能会问,为什么每次都无法手动更新 例如:Update ...