block 声明定义

#import <Foundation/Foundation.h>

// 使用typedef 给block类型起别名
typedef CGFloat (^Calculate)(CGFloat, CGFloat);


int whole = 1;



int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        // 实现将字符串转换为整形的blcok
        int (^block1) (NSString *str) = ^int (NSString *str) {
            return [str intValue];
        };
        
        // 类型: int (^) (NSString *)
        // 变量名: block1
        
        // 简写
        // block声明中的变量名可以省略
        // block的匿名函数部分,返回值可以省略
        int (^block2) (NSString *) = ^(NSString *str) {
            return [str intValue];
        };
        
        // 调用block 实现将字符串转为数字
        int i = block2(@"8188"); // 可以叫做回调
        NSLog(@"i= %d",i);
        
        // 练习:声明block变量,将浮点型数字,转化字符串
        NSString * (^block3) (float) = ^(float f) {
            return  [NSString stringWithFormat:@"%.2f", f];
        };
        
        NSString *str1 = block3(8188.75);
        NSLog(@"str1 = %@", str1);
        
        // 声明block变量,实现求两个NSInteger变量的和
        int (^sum) (int, int) = ^(int a, int b) {
            return a + b;
        };
        
        int a = 100, b = 80;
        int sum1 = sum(a, b);
        
        NSLog(@"sum = %d", sum1);
        
        // 声明block变量,实现求两个NSInteger变量的差
        
        NSInteger (^sub) (NSInteger , NSInteger) = ^(NSInteger a, NSInteger b) {
            return a - b;
        };
        
        NSInteger he = sub(100, 20);
        NSLog(@"sub = %ld", he);
        
        // 声明block变量,实现求两个NSInteger变量的积
        
        NSInteger (^ji) (NSInteger, NSInteger) = ^(NSInteger a, NSInteger b) {
            return a * b;
        };
        
        NSInteger jii = ji(10, 20);
        NSLog(@"jii = %ld", jii);
        
        // 练习:声明block判断数组中是否包含某个元素
        BOOL (^ifhave) (NSArray *, NSString *) = ^(NSArray *arr, NSString *str) {
            return [arr containsObject:str];
        };
        
        
        
        // 使用新类型定义block
        __block int beiShu = 10;    // 局部变量,不允许修改,添加了 __block(two "__") 后才可以修改
        Calculate product = ^(CGFloat a, CGFloat b) {
            beiShu = 5;
            whole = 2;  // 全局变量
            return a * b * 5;
        };
        
        // 注意:block内部可以读取外部局部变量的值,想要修改,要添加 __block 修饰变量
        // block内部可以读取和修改外部全局变量
        
        CGFloat product1 = product(1.5, 2.0);
        NSLog(@"product1 = %.2f", product1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值