Block与参数

以下2行代码中的block1与block2的类型是不同的,block1是不定参数的block,而block2是无参数的block

void(^block1)();
void(^block2)(void);

下面的代码展示了一个参数不定的block的使用的例子:

#import "ViewController.h"

typedef NS_ENUM(NSUInteger, DataType) {
    DataTypeWithoutMessage = 0,
    DataTypeWithMessage,
};

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];

    [self processDataForType:DataTypeWithoutMessage block:^void(NSUInteger code) {
        // code = 100
        NSLog(@"code = %tu", code);
    }];

    [self processDataForType:DataTypeWithoutMessage block:^void(NSUInteger code, NSString *message) {
        // code = 100, message = (null)
        NSLog(@"code = %tu, message = %@", code, message);
    }];

    [self processDataForType:DataTypeWithMessage block:^void(NSUInteger code, NSString *message) {
        // code = 200, message = Hello World
        NSLog(@"code = %tu, message = %@", code, message);
    }];
}

// 第二个参数block,其类型为void(^)(),圆括号中没有void,并不表示该block没有参数,而是表示该block为可变参数
- (void)processDataForType:(DataType)dataType block:(void(^)())block {
    switch (dataType) {
        case DataTypeWithoutMessage:
            !block ?: block(100);
            break;
        case DataTypeWithMessage:
            !block ?: block(200, @"Hello World");
            break;
        default:
            break;
    }
}

@end
时间: 2024-11-18 22:20:31

Block与参数的相关文章

block 做参数

三部分 1,定义函数 /* 传出类定义block */ //定义block typedef void (^ItemClickBlock)(NSInteger selectedIndex); //block 做函数参数 + (instancetype)navigationViewWithItems:( NSArray <NSString *> * )items itemClick:(ItemClickBlock)itemClick; 2,实现 #pragma mark - init block

block 方法参数中带有block 如何生成 如何使用

第一种 typedef void(^SDWebImageDownloaderProgressBlock)(NSInteger receivedSize, NSInteger expectedSize); @interface ssyTest : NSObject { SDWebImageDownloaderProgressBlock ssyblock; } - (void)testssy:(NSString *)str block:(SDWebImageDownloaderProgressBlo

嵌入式&amp;iOS:回调函数(C)与block(OC)传 参/函数 对比

C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(int data_i32)); callBack.c 1).在doSomeThingCount函数,对运行次数自增,并调用参数--函数. void DSTCount(void(*CallBack)(int data_i32)) { static int numb = 0; numb++; (*Call

嵌入式&amp;iOS:回调函数(C)与block(OC)回调对比

学了OC的block,再写C的回调函数有点别扭,对比下区别,回忆记录下. C的回调函数: callBack.h 1).定义一个回调函数的参数数量.类型. typedef void (*CallBack)(int data_i32); 2).声明一个外部函数指针. extern CallBack myCallBackPTR; 3).声明一个doSomeThingCount函数 void DSTCount(void); callBack.c 1).定义一个函数指针 CallBack myCallBa

由浅至深学习block

关于block 在iOS 4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调.这不免让我们想到在C函数中,我们可以定义一个指向函数的指针并且调用: bool executeSomeTask(void) {     //do something and return if success or not } bool (*taskPoint)(void); taskPoint = something; 上面的函数指针可以直接通过(*taskPo

iOS block的用法

转自:http://www.cnblogs.com/jy578154186/archive/2012/09/30/2709130.html 本文来自台湾的某开发人员的博客,被墙,感觉讲的比较易懂,所以引过来.文字简体化了,原来是繁体,变数=变量,这个注意一下. 本文的顺序是层层深入的,要想简单的了解,只看X.1 初探Block就好了 本章学习目标: 1. 了解何谓block. 2. 了解block的使用方法. Block 是iOS在4.0之后新增的程式语法,严格来说block的概念并不算是基础程

iOS中Block的基础用法

本文简介 本章不会对Block做过多的实现研究.只是讲解基本的用法.纯粹基础知识.结合实际项目怎么去做举例.Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等.用过GCD就知道Block的精妙之处. Block简介 Block是一种比较特殊的数据类型.它可以保存一段代码,在合适的时候取出来调用. Block的修饰 ARC情况下1.如果用copy修饰Block,该Block就会存储在堆空间.则会对Block的内部对象进行强引用,导致循环引用.内存无法释放.解决方法:新建一个

关于Block初识与自己的认识

前些天学到了Block,对于Block有了一些大致的认识 Block是什么? 我认为是一些行为的封装  举个例子  要将两个参数进行加减乘除    创建4个Block实现价钱乘除四个操作即可   用一个方法  传两个参数和一个block  返回就是block对这两个参数的操作 代码演示 1 #import <Foundation/Foundation.h> 2 #import "Calc.h" 3 int main(int argc, const char * argv[]

iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)

iOS页面间传值的方式(NSUserDefault/Delegate/NSNotification/Block/单例) 实现了以下iOS页面间传值:1.委托delegate方式:2.通知notification方式:3.block方式:4.UserDefault或者文件方式:5.单例模式方式:6.通过设置属性,实现页面间传值 在iOS开发中,我们经常会遇到页面间跳转传值的问题,现归纳总结一下: 情况1:A页面跳转到B页面 方法: 在B页面的控制器中,编写对应的属性,在A页面跳转到B页面的地方,给