#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);
block 声明定义
最新推荐文章于 2020-02-23 22:07:40 发布