oc BLOCK 字面量

⼀、Block语法

Block本质就是匿名函数

Block 声明:

     脱字符(^)  返回值类型 (参数列表) {

     实现功能的代码段
    
如果block有返回值,需要return

     };


// 定义block 实现返回两个数的最大值
^
int (int a, int b) {
   
return a>b ? a:b;

};


二、Block使用

不常用:

int(^maxBlock)(int,int) = ^int(inta,intb) {

    return a>b? a:b;
};

NSLog(@"%d", maxBlock(5,4));

Block进行typedef:

typedef int (^BlockType)(int x,int y)

原类型:int (^)(int x,int y)

新类型:BlockType

main前:

typedef int(^MaxBlock)(int, int);

main:

MaxBlock block2 = ^(int a, int b) {
   
return a>b ? a:b;
};

NSLog(@"%d",block2(5,4));



Block权限:

block外局部变量:只读

静态变量、全局变量、__block修饰的局部变量:读写

block作为方法的参数

1.student对象负责调用block

2.Student外部负责定义bloc,并作为方法的参数传入


typedefvoid(^SayBlock)();

- (void)sayHello:(SayBlock)block;
{
   
// 调用block实现打招呼
    block();

}

main:

[stu sayHello:^{
    NSLog(
@"Hello");

}];



三、Block与数组排序

1.typedef block的简单使用

#import...

// 中间至少空一行!

typedef NSString*(^AppendBlock)(NSString *, NSString *);

@interface

NSString * (^appendBlock) (NSString *, NSString *) = ^(NSString * str1, NSString * str2); 

@end

@implementation

NSString * (^appendBlock) (NSString *, NSString *) = ^(NSString * str1, NSString * str2) {
   
return [str1 stringByAppendingString:str2];

};

@end

main.m

NSLog(@"%@",appendBlock(@"Hi",@" Block!"));


NSMutableArray * arr1 = [NSMutableArrayarrayWithObjects:@"abc3", @"abc2", @"abc5", @"abc4", nil];

NSLog(@"arr1=%@",arr1);


2.^NSComparisonResult 排序

// 升序
[arr1
sortUsingSelector:@selector(compare:)];

// 降序
[arr1
sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
   
   
// 返回值:NSComparisonResult 两个值的比较结果
   
// 参数:数组中两个相邻的对象
   
   
// 数组在调用block时,传入相邻的两个数组对象;在block内部,根据排序规则编写实现代码,并返回比较结果
   
   
// 对象类型声明
   
NSString * str1 = (NSString *)obj1;

    NSString * str2 = (NSString *)obj2;

    return [str2 compare:str1]; // str2>str1时排序

}];

// ui降序
[arr2
sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
   
return [obj1 UIScore]<[obj2 UIScore];

}];

// name升序
[arr2
sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
   
Student * s1 = (Student *)obj1;
   
Student * s2 = (Student *)obj2;
   
return [s1.name compare:s2.name];

}];

3.block作为参数的使用

#pragma mark -- 对三门课程分数操作

.h

typedeffloat(^ScoreBlock)(float, float, float);

.m

- (void)handleScore:(ScoreBlock)block

{

   float result = block(_CScore, _OCScore, _UIScore);     //2.

    NSLog(@"result = %.1f", result);     //4.

}

main.m

[stu handleScore:^float(float CScore, float OCScore, float UIScore) {     //1.

    float sum = CScore + OCScore + UIScore;     //3.1

    return sum / 3;     //3.2

}];

执行顺序:

1.调用handleScore方法;

2.handleScore中给block发送消息;

3.在调用方法处执行操作,直到return;

4.执行handleScore中剩余操作。



四、字面量

#pragma mark -- 字面量 --

// 1、字符串
NSString * name = @"hi";

// 2、创建不可变数组
NSArray * nameArray = @[@"奥特曼", @"小怪兽"];

// 3、访问数组元素
NSLog(@"%@",nameArray[0]);

// 4、创建NSNumber对象
NSNumber * age = @12;

// 5、创建不可变字典
NSDictionary * dic = @{@"key1":@"value1", @"name":@"hi", @"age":@18, @"gender":@""};
NSLog(@"%@",dic);

// 6、访问字典中键值对的value

NSLog(@"%@",dic[@"gender"]);


转载于:https://my.oschina.net/zooyf/blog/489589

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值