block 声明定义

来源:互联网 发布:mac图片出现问号 编辑:程序博客网 时间:2024/06/01 07:31
#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);

0 0