随意细解:OC -- 类的扩展
来源:互联网 发布:虚拟商品自动发货源码 编辑:程序博客网 时间:2024/05/16 04:59
用到的Person类为基本的功能,这里就不写了
#import <Foundation/Foundation.h>
#import "Person.h"
// 两个数的和的函数
int sumValue(int a ,int b)
{
return a + b;
}
// block作为参数体现优势
// 实现两个数的加减乘除
int resultTwoNumber1(int num1 ,int num2,int (^block)(int a ,int b))
{
return block(num1, num2);
}
typedef NSComparisonResult (^DJCompareBlock)(id obj1,id obj2);
// 声明全局变量
int value = 10;
int main(int argc,constchar * argv[]) {
int ra =resultTwoNumber1(15,3, ^int(int a,int b) {
return a / b;
});
int (*p)(int a ,int b) =NULL;
p = sumValue;
// 函数指针调用
printf("%d\n",p(3,5));
// Block标志 ^托字符(凸起符)
// Block 保存的是有特定功能的函数体
// 数据类型 +变量名=初值
// int (^变量名)(int a , int b)=初值(跟前面的类型要一致)
// 初值的部分是一个没有名字的函数体
int (^Block)(int a ,int b) = ^int (int a ,int b)
{
return a + b;
};
int result = Block(2,3);
NSLog(@"%d",result);
// 打印参数的block OC的
// 无返回值用void
void (^PrintfBlock)(NSString *str) = ^void (NSString *str)
{
NSLog(@"%@",str);
};
// block调用直接使用block的名字去调用
PrintfBlock(@"哈哈");
// block类型 NSInteger (^)(NSString *str)
// block名 change
// block的值 匿名的函数并且类型与block类型相同 ^NSInteger (NSString *str){ return [str intValue]; };
// 匿名函数是函数其函数中定义的便两个存在栈区
NSInteger (^change)(NSString *str) = ^NSInteger (NSString *str)
{
return [strintValue];
};
NSInteger result1 = change(@"2");
NSLog(@"%ld",result1);
NSInteger (^sumValue)(NSInteger a,NSInteger b) = ^NSInteger (NSInteger a,NSInteger b){
return a + b;
};
NSLog(@"%ld", sumValue(2,3));
NSInteger (^subValue)(NSInteger a,NSInteger b) = ^NSInteger (NSInteger a,NSInteger b){
return a - b;
};
NSLog(@"%ld", subValue(5,3));
// block的好处
// 当把Block当做一个参数传入方法中
// 非常的灵活可以灵活的掌控block的实现
// 也就是你传入的block实现的是什么功能你这个方法就实现什么功能
// block排序
// 实现原理:数组中两个元素进行比较
// 比较后返回值如果前面比后面大则交换
// 经此比较到最后一个元素完成排序
// compare:可以比较的类型:
// 1.字符串类型(NSString *)
// 2.NSNumber * 类型
NSMutableArray *array = [NSMutableArrayarrayWithObjects:@11,@8,@9,@12,nil];
NSNumber *n1 = [NSNumbernumberWithInt:11];
// 语法糖初始化NSNumber类型方法
NSNumber *n2 =@11;
DJCompareBlock block = ^NSComparisonResult (id obj1,id obj2){
// 先确定类型
NSNumber *num1 = (NSNumber *)obj1;
NSNumber *num2 = (NSNumber *)obj2;
// 根据类型确定升序还是降序
if ([num1compare:num2] >0) {
returnNSOrderedDescending;
}elseif ([num1compare:num2] ==0){
returnNSOrderedSame;
}else{
returnNSOrderedAscending;
}
};
// 需要什么类型就给什么类型
[array sortUsingComparator:block];
Person *p1 = [[Personalloc]initWithName:@"Dajun" Age:22];
Person *p2 = [[Personalloc]initWithName:@"Mtt" Age:25];
Person *p3 = [[Personalloc]initWithName:@"QQ" Age:23];
Person *p4 = [[Personalloc]initWithName:@"WW" Age:21];
Person *p5 = [[Personalloc]initWithName:@"SS" Age:22];
NSMutableArray *arr = [NSMutableArrayarrayWithObjects:p1, p2, p3 ,p4, p5,nil];
// 按姓名排序
[arr sortUsingComparator:^NSComparisonResult(id obj1,id obj2) {
// 确定类型
Person *p1 = obj1;
Person *p2 = obj2;
// 姓名升序降序
if ([p1.namecompare:p2.name] >0) {
returnNSOrderedDescending;
}elseif ([p1.namecompare:p2.name] ==0){
returnNSOrderedSame;
}else{
returnNSOrderedAscending;
}
}];
NSLog(@"%@",arr);
// 按年龄排序
[arr sortUsingComparator:^NSComparisonResult(id obj1,id obj2) {
// 确定类型
Person *p1 = obj1;
Person *p2 = obj2;
if (p1.age > p2.age) {
returnNSOrderedDescending;
}elseif (p1.age == p2.age){
returnNSOrderedSame;
}else{
returnNSOrderedAscending;
}
}];
NSLog(@"%@",arr);
// 字面量的使用(语法糖)
// 切记:字面量使用的初始化方法是类方法初始化
NSArray *array1 = [NSArrayarrayWithObjects:@"1",@"2",nil];
// 相当于
NSArray *arrayN =@[@"1",@"2"];
// 取出一个元素
[arrayN objectAtIndex:0];
// 相当于
// arrayN[0];
// 给Block类型起别名
NSLog(@"%@",arr);
__blockint num =5;
BOOL (^myBlock)(NSString *str1,NSString *str2) = ^BOOL (NSString *str1,NSString *str2){
// 在Block的实现(值)中直接修改局部变量是不行的,需要添加关键字(声明时) __block才能修改
num = 100;
NSLog(@"%d",num);
// 在block的实现(值)中,可以直接修改全局变量不需要添加关键字
value =200;
NSLog(@"%d",value);
return [str1isEqualToString:str2];
};
NSLog(@"%d", myBlock(@"abc",@"abc"));
return0;
}
- 随意细解:OC -- 类的扩展
- 随意细解:OC -- 字典、数组、集合
- 随意细解:OC -- 内存管理
- 随意细解:OC -- 内存管理高级
- OC 类的扩展
- OC----类的扩展
- 随意细解:OC -- 属性、点语法、KVC
- 随意细解:OC -- NSData、Category、Extension、Protocol
- OC类的扩展总结
- OC语言类的扩展
- OC基础知识 -- 类的扩展
- OC-10.类的扩展
- OC类的扩展总结
- oc的类的扩展(课件)
- OC中类的扩展介绍
- OC总结——类的扩展
- OC基础:类的扩展.协议
- oc第七天:类的扩展
- CloudSuite之Graph Analytics集群安装
- Flume几种监控方式
- test-01
- iOS完整学习路线图
- 组态王与单片机协议2
- 随意细解:OC -- 类的扩展
- 关于app启动动画如何做到第一次启动采用图片轮播,以后启动都只有1张图片的解决方案
- Hibernate中两种获取Session的方式
- leetcode-Two Sum
- iOS 相机打开动画效果
- 组态王与单片机通信协议3
- [python] 时间序列分析之ARIMA
- swift:制作一个简单的tableheaderview+_navigationbar渐变效果
- 脚本结束 调用函数处理其他事情 register_shutdown_function()