Blocks Programming Helper → Blocks are ?

码海织云使
• 阅读 915

创建一个 Block

void (^aBlock)(void) = ^{
    NSLog(@"This is a block");
};

这个 block 没有参数和返回值。

调用一个 Block

aBlock(); //This is a block

带参数和返回值的 Blocks
Block 可以带参数和返回值,就像函数和方法一样。

double (^multiplyTwoValues)(double, double) = ^(double firstValue, double secondValue) {
    return firstValue * secondValue;
};
//返回值被推断从 block 内部,也可以明确指定。
multiplyTwoValues = ^ double (double firstValue, double secondValue) {
    return firstValue * secondValue;
};
double result = multiplyTwoValues(2, 3); //result = 6

使用类型定义 Blocks
如果需要定义多个相同类型的 block 变量,建议使用。

//不使用类型定义
void (^firstBlock)(void) = ^{
    NSLog(@"This is firstBlock");
};
void (^secondBlock)(void) = ^{
    NSLog(@"This is secondBlock");
};
//使用类型定义
typedef void (^SimpleBlock)(void);
SimpleBlock firstBlock = ^{
    NSLog(@"This is firstBlock");
};
SimpleBlock secondBlock = ^{
    NSLog(@"This is secondBlock");
};

在嵌套 block 时使用,可读性更高。

//不使用类型定义
void (^(^nestBlock)(void (^)(void))(void) = ^(void (^aBlock)(void)) {
    return aBlock;
};
//使用类型定义
SimpleBlock (^nestBlock)(SimpleBlock) = ^(SimpleBlock aBlock) {
    return aBlock;
};
点赞
收藏
评论区
推荐文章
limit limit
2年前
Rust 包装 objc Block
Block简介使用objc开发App时,经常会使用到Block,这个语法糖是Clang(https://clang.llvm.org/)给C语言实现的一个拓展.Block
Stella981 Stella981
3年前
Confluence代码块(Code Block)宏
有时候现在wiki上插入代码,如何让代码高亮,变的有颜色,下面这篇文章可能会帮助你,先看下django代码高亮效果图!(https://oscimg.oschina.net/oscnet/70a554a8afdbc15c21538eac0ca83a367c1.png)代码块(CodeBlock)宏允许你在 Confluence页面中显示代码,
Wesley13 Wesley13
3年前
Oracle 统计表空间和对象历史增长量
最近7天内每天(某个)表空间的增长量colTS_NAMEfora15SELECTa.snap_id,a.rtime,c.tablespace_namets_name,round(a.tablespace_sizec.block_size/1024/1024/1024,
Stella981 Stella981
3年前
Spark Transformations之mapPartitions
mapPartitions(func)Similartomap,butrunsseparatelyoneachpartition(block)oftheRDD,sofuncmustbeoftypeIterator<TIterator<UwhenrunningonanRDDoftypeT.
Wesley13 Wesley13
3年前
.clear 万能清除浮动
htmlbodydiv.clear,htmlbodyspan.clear{background:none;border:0;clear:both;display:block;float:none;
Stella981 Stella981
3年前
Ruby中的each collect map inject
说明:each——连续访问集合的所有元素collect—从集合中获得各个元素传递给block,block返回的结果生成新的集合。map——同collect。inject——遍历集合中的各个元素,将各个元素累积成返回一个值。arr\1,2,3\1)arr2arr.each{|elem
Stella981 Stella981
3年前
Magento Block的几种调用方式
MagentoBlock的三种显示方式1。最常见的一种方式:在layout文件中配置,然后在.phtml模板文件中输出。<cms_page<referencename"content"<blocktype"cms/page"name"cms_page"</block</
Stella981 Stella981
3年前
IOS——objc_setAssociatedObject关联的使用
简单介绍一下iOS中关联的使用,建议在情非得已的情况下使用 //创建一个对象AnimalanimalAnimalallocinit;animalsetName:@"小明";//定义block/头文件中定义bl
Wesley13 Wesley13
3年前
ASSM和PCTUSED
相信很多人都知道,当使用了ASSM(autosegmentspacemanagement),PCTUSED将不在有效。但是,有多少人告诉你,为什么在ASSM中PCTUSED被忽略。ASSM之前,Oracle使用freelist,freegroup来管理空闲的block。哪如何决定一个block是否可以加到freelist上?假设,如果block
Stella981 Stella981
3年前
Block的循环引用
在ios常见的循环引用中曾经提到过block:!(http://static.oschina.net/uploads/space/2016/0830/112327_c1yY_1463495.png)看看上面最基本的block循环应用,self包含block,block包含了self中的变量val,所以形成了循环应用,编译器给出了循环引用的警告,当
block yandex bot
是Yandex搜索引擎的爬虫。在这篇文章中,我总结了所有的Useragent,通过那篇文章,我们可以看出有些Yandexbot遵守,有些不遵守robots.txt协议。我们需要屏蔽yandexbot(blockyandexbot)可以通过robots.txt和IP的方式屏蔽,下面分别来讲。通过robots.txt