//
// XunLeiDownLoad.h
// BlockView
//
// Created by lanouhn on 15-7-18.
// Copyright (c) 2015年 lanouhn. All rights reserved.
//
import
import “XunLeiDownLoad.h”
@implementation XunLeiDownLoad
(void)downLoadWithPersent:(downLoadBlock)downLoad
{
int a = arc4random() % 100;
downLoad([NSString stringWithFormat:@”你已经下载了%d%%” , a]);
}(void)dailNumber:(NSString *)number toLiyangdeshouji:(liyangdeshouji)shouji
{
//判断你打的电话号码是否正确 , 如果正确, 扔你找到李阳 ,如果不正确,让你找不到if ([number isEqualToString:@”120”]) {
shouji(@”李阳开始接听电话”);
}
}
@end
//
// main.m
// BlockView
//
// Created by lanouhn on 15-7-18.
// Copyright (c) 2015年 lanouhn. All rights reserved.
//
import
import “Login.h”
import “Person.h”
import “XunLeiDownLoad.h”
int a = 6;
int (^p)(int , int) = ^(int a , int b){
return a + b;
};
int main(int argc, const char * argv[]) {
@autoreleasepool {
//block 的基本用法
//block 的本质:匿名函数
//block的使用:类似于函数指针的调用
//block 的调用:可以和函数指针回调作对比
//
//block的定义和实现步骤
//1.按照你要实现的功能类型定义block(= 左边)
//2.按照你要实现的功能内容实现block(= 右边)
//block 的实现又分三步
//1.确定你要实现的是block(^)
//2.确定你要实现的block所需要的参数列表是什么(C语言参数列表的写法)
//3.实现block的功能体,也就是{}里面的内容
//4.记得加;
// p = addTwoValue;
/*
int a = p(7 , 8);
NSLog(@”%d” , a);
int b = (5 , 8);
NSLog(@"%d" , b);
*/
//定义一个block 实现两个数相减
/*
NSInteger (^minusOfTwo)(NSInteger , NSInteger) = ^(NSInteger a , NSInteger b){
return a - b;
};
NSInteger a = 8 , b = 3;
NSLog(@"%ld" , minusOfTwo(a , b));
//写一个用来求三个数最大值的block, 并实现block的回调
int (^maxOfThree)(int , int , int) = ^(int a , int b , int c ){
return a > (b > c ? b : c) ? a : (b > c ? b : c);
};
int max = maxOfThree(34 , 23 , 56);
NSLog(@"%d" , max);
*/
//实现一个block NSNumber + NSNumber = NSNumber
/*
NSNumber *(^addTwoNSNumber)(NSNumber * , NSNumber *) = ^(NSNumber *a , NSNumber *b)
{
NSInteger c = [a intValue] + [b intValue];
return [NSNumber numberWithInt:c];
};
NSNumber *c = addTwoNSNumber(@3 , @5);
NSLog(@"%@" , c);
*/
//实现一个block, 将int->NSNumber
/*
NSNumber *(^intToNumber)(int);
intToNumber = ^(int a){
return [NSNumber numberWithInt:a];
};
NSLog(@"%@" , intToNumber(5));
//实现block 将NSNumber->int
int (^numberToInt)(NSNumber *);
numberToInt = ^(NSNumber *a){
return [a intValue];
};
NSNumber *a = [NSNumber numberWithInt:90];
int result = numberToInt(a);
NSLog(@"%d" , result);
//实现一个block 将int->NSString
NSString *(^intToString)(int) = ^(int b){
return [NSString stringWithFormat:@"%d" , b];
};
int b = 0;
NSString *result1 = intToString(b);
NSLog(@"%@" , result1);
*/
//实现一个block 将string->int
/*
int (^stringToInt)(NSString *) = ^(NSString *str){
return [str intValue];
};
NSLog(@"%d" , stringToInt(@"12"));
//实现一个block NSNumber + NSNumber = NSNumber
NSNumber *(^addTwoNumber)(NSNumber * , NSNumber *) = ^(NSNumber *a , NSNumber *b){
int c = [a intValue] + [b intValue];
return [NSNumber numberWithInt:c];
};
NSNumber *result = addTwoNumber(@100 , @8);
NSLog(@"%@" , result);
*/
//实现一个block 比较两个数的大小
/*
NSString *(^compare)(int , int) = ^(int a , int b){
if (a > b) {
return @"降序";
} else if (a < b){
return @"升序";
} else {
return @"xiangdeng";
}
};
NSLog(@"%@" , compare(0 , 4));
*/
//只要是对象 都可以调用compare方法
//实现一个block 比较两个NSNumber的大小
/*
NSInteger (^cmp)(NSNumber * , NSNumber *) = ^(NSNumber *a , NSNumber *b){
return [a compare:b];
};
NSNumber *a = @5;
NSNumber *b = @9;
NSInteger result = cmp(a , b);
NSLog(@"%ld" , result);
//按照特定的字符分割一个字符串
NSString *str = @"234dsfdf*dfge789";
NSArray *arr = [str componentsSeparatedByString:@"*"];
NSLog(@"%@" , arr);
*/
//定义一个block 分割字符串
/*
NSArray *(^cutString)(NSString * , NSString *) = ^(NSString *allString , NSString *cutsymbol){
return [allString componentsSeparatedByString:cutsymbol];
};
NSLog(@"%@" , cutString(str , @"9"));
*/
/*
NSArray *(^cutString)(NSString * , NSString *) = ^(NSString *allString , NSString *cutSymbol){
return [allString componentsSeparatedByString:cutSymbol];
};
NSLog(@"%@" , cutString(str , @"d"));
*/
//block 的重定义
/*
//b 是一个变量
int (^b)(int , int);
//B 是一个类型
typedef int (^B)(int , int);
B bb = ^(int a , int b){
return a + b;
};
NSLog(@"%d" , bb(5 , 8));
//通过block对数组排序
NSArray *arr = @[@6 , @8 , @3 , @9 , @10];
//自定义一个用来排序的block
NSComparisonResult (^paiXu)(NSNumber * , NSNumber *) = ^(NSNumber *a , NSNumber *b){
return [a compare:b];
};
// NSArray *newArr = [arr sortedArrayUsingComparator:paiXu];
//使用系统默认方法 compare
// NSArray *newArr = [arr sortedArrayUsingSelector:@selector(compare:)];
//使用自定义的block
// NSArray *newArr = [arr sortedArrayUsingComparator:paiXu];
NSArray *newArr = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return -[obj1 compare:obj2];
}];
NSLog(@"%@" , newArr);
*/
//创建5个person对象
/*
Person *per1 = [Person personWithName:@"dongzholi" andAge:@40 andTelephoneNo:@"120"];
Person *per2 = [Person personWithName:@"heyuanxiang" andAge:@19 andTelephoneNo:@"119"];
Person *per3 =[Person personWithName:@"liyang" andAge:@34 andTelephoneNo:@"110"];
Person *per4 = [Person personWithName:@"liuxiang" andAge:@55 andTelephoneNo:@"115"];
Person *per5 = [Person personWithName:@"xuyabo" andAge:@13 andTelephoneNo:@"112"];
NSArray *arr = @[per1 , per2 , per3 , per4 , per5];
*/
//按照数组里面的年龄进行排序
// NSArray *array = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
// return [[(Person )obj1 telephoneNo] compare:[(Person )obj2 telephoneNo]];
// }];
// NSLog(@”%@” , array);
/*
NSArray *newArr = [arr sortedArrayUsingSelector:@selector(sortedByName:)];
NSArray *array = [arr sortedArrayUsingSelector:@selector(sortedByAge:)];
NSArray *arr1 =[arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [[obj1 telephoneNo] compare:[obj2 telephoneNo]];
}];
NSLog(@"%@" , arr1);
*/
//block 基本用法
// 哪一个block 先调用 , 就先走哪一个block的内部
//block 内部 可以使用局部变量 , 但是不能修改
//要想在block内部修改一个变量 ,必须在这个局部变量定义之前用__block来修饰
//block 内部,即可以使用全局变量 ,又可以修改全局变量
/*
void (^kkk)() = ^(){
NSLog(@"%d" , a++);
};
kkk();
__block int b = 8;
void (^hhh)() = ^(){
NSLog(@"%d" , b++);
};
hhh();
NSLog(@"a = %d , b = %d" , a , b);
*/
//block 值的回调 , 主要作用是把值从内部传出来
// 创建一个login对象
Login *login = [[Login alloc] init];
//用login对象调用登录方法
[login loginWithName:@"111" andPassWord:@"222" success:^(NSString *str) {
NSLog(@"%@" , str);
} failed:^(NSString *str) {
NSLog(@"%@" , str);
}];
//创建一个对象
// XunLeiDownLoad *down = [[XunLeiDownLoad alloc]init];
//
// [down downLoadWithPersent:^(NSString *str) {
// NSLog(@”%@” , str);
// }];
//
//
//
//
// [down dailNumber:@”120” toLiyangdeshouji:^(NSString *str) {
// NSLog(@”%@” , str);
// }];
}
return 0;
}