OC: Block回调的使用demo
Block 的用法
对于类的继承问题,子类在实现的时候,一般是自下而上,先看看下面的实现没有,没实现就向上找方法去实现。
//
// main.m #import <Foundation/Foundation.h>
#import "LoginMangage.h"
#import "NSString+Addition.h" //2 block的当做方法进行传值
//3 一种Block排序的写法(貌似还是以前的方法哦)
//4 用结构体(-1 0 1) NSComparisonResult 类型接收判断结果
//5 打印出当前时区的时间(不是格林威治时间哦)
//6 练习-打印出当前时区的时间
//7 dateWithTimeIntervalSinceNow:的使用
//8 (来自互联网-究竟是不是毫秒)获取自1970年以来的毫秒数的方法 ??????
//9 两个时间判断是否相等 获取时间间隔
//10 catergroy 对 NSString 类的方法的扩展
int main(int argc, const char * argv[]) { // @autoreleasepool {
// //// // 1.定义一个Block,返回值为bool,有两个NSString 实现判断两个字符串是否相等。
// //
// // 2.创建一个数组,初始化为@“123”,@“21”,@“33”,@“69”,@“108”,@“256”使用Block,进行数组排序,并输出内容
// //
// // 3.定义一个Block,返回值为NSInteger ,有两个参数,一个是NSArray 一个是NSString,实现判断数组时候包含此字符串,如果包含,返回字符串下标,如果不包含返回-1.
// //(1)
// printf("输入两个字符串\n");
// char str[2][10] = {0};
// NSMutableArray * arr = [NSMutableArray array];
// for (int i = 0; i < 2; i++) {
// scanf("%s",str[i]);
// NSString * str0 = [[NSString alloc]init];
// NSString * str1 = [NSString stringWithUTF8String:str[i]];
// arr[i] = [str0 stringByAppendingString:str1];
// }
// BOOL (^compareWithTwoNString)(NSString *,NSString *) = ^(NSString *s0,NSString *s1){
// return [s0 isEqualToString:s1];
// };
// int isEqual = compareWithTwoNString(arr[0],arr[1]);
// if (isEqual) {
// NSLog(@"两次输入相等");
// }else{
// NSLog(@"两次输入不相等");
// }
// //(2)
// NSMutableArray * muArr = [@[@"123",@"21",@"69",@"33",@"108",@"256"]mutableCopy];
// [muArr sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
// return [obj1 compare:obj2];
// }];
// NSLog(@"排序之后为 %@",muArr);
// //(3)
// NSInteger(^isInIt)(NSArray *,NSString *) = ^(NSArray * arr,NSString * str){
// NSInteger tem = 0;
// for (int i = 0; i < [arr count]; i++) {
// if ([arr[i] isEqualToString:str]) {
// tem++;
// NSLog(@"已经找到了");
// return tem ;
// break;
// }
// }
// NSLog(@"没有找到");
// tem = -1;
// return tem;//注意这里的 return 的位置
// };
// NSArray * arrary = @[@"lu",@"zhang",@"huang ",@"li ",@"zhao",@"wang",@"qian"];
// NSInteger afterFind = isInIt(arrary,@"wang");
// NSLog(@"下标为%ld",afterFind);
// } // @autoreleasepool {
// //2 block的当做方法进行传值
// LoginMangage * login1 = [[LoginMangage alloc]init];
// [login1 initWithName:@"user" paswword:@"123456" succe:^(NSString *success) {
// NSLog(@"%@",success);
// } failure:^BOOL(NSString *errorMessage) {
// NSLog(@"%@",errorMessage);
// return 1;
// }];
// } // @autoreleasepool {
// //3 一种Block排序的写法(貌似还是以前的方法哦)
// NSArray * stringArray = [NSArray arrayWithObjects:@"abc 1", @"abc 21", @"abc 12",@"abc 13",@"abc 05",nil];
// NSComparator sortBlock = ^(id string1 ,id string2){//貌似这里开始的三行代码没有什么作用
// return [string1 compare:string2];
// };
// NSArray * sortArray = [stringArray sortedArrayUsingSelector:@selector(compare:)];
// NSLog(@"排序后的为:%@",sortArray);
// } // @autoreleasepool {
// //4 用结构体(-1 0 1) NSComparisonResult 类型接收判断结果
// NSString * str1 = @"123";
// NSString * str2 = @"456";
// NSComparisonResult(^compareStrings)(NSString *,NSString *) = ^(NSString * string1 ,NSString * string2){
// return [string1 compare:string2];
// };
// NSComparisonResult resu = compareStrings(str1,str2);
// if (resu == 1) {
// NSLog(@"str1小于str2");
// }
// if (resu == -1) {
// NSLog(@"str1大于str2");
// }
// if (resu == 0) {
// NSLog(@"str1等于str2");
// }
// } // @autoreleasepool {
// //5 打印出当前时区的时间(不是格林威治时间哦)
// NSDate * datenow = [NSDate date];//注意这里不能写成了 NSData
//// NSLog(@"%@",datenow);//没有修改时间显示格式的的时候打印结果
// NSString * datestring = @"yyyy年 MMM d 日 是一年的第 D 天 EEEE ahh:MM:SS";
// NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
// [formatter setDateFormat:datestring];
// NSString * strdate = [formatter stringFromDate:datenow];
// NSLog(@"获取当前时间为:%@",strdate);
// //互联网
// //时区转换,取得系统时区,取得格林威治时间差秒
// //(http://www.isaced.com/post-175.html) 已经实现在控制台的转化为当前时区
// NSTimeInterval timeZoneOffset = [[NSTimeZone systemTimeZone]secondsFromGMT];
// NSLog(@"%f",timeZoneOffset/60.0/60.0);
// datenow = [datenow dateByAddingTimeInterval:timeZoneOffset];
// [formatter setDateFormat:@"现在日期:yyyy年MM月dd日\n现在时刻:aHH:mm:ss"];
// NSDate * dtime = [NSDate date];
// NSString * newDateStr = [formatter stringFromDate:dtime];
// NSLog(@"%@",newDateStr);
// } // @autoreleasepool {
// //6 练习-打印出当前时区的时间
// NSTimeInterval timeZoneOffset = [[NSTimeZone systemTimeZone]secondsFromGMT];
// NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]init];
// [dateFormatter setDateFormat:@"\n现在日期:yyyy年 MM月 d 日 EEEE\n 现在时间:aHH:mm:ss "];
// NSDate * dateNow = [NSDate date];
// dateNow = [dateNow dateByAddingTimeInterval:timeZoneOffset];
// NSString * afterTrDate = [dateFormatter stringFromDate:dateNow];
// NSLog(@"当前时间:%@",afterTrDate);
// } // @autoreleasepool {
// //7 dateWithTimeIntervalSinceNow:的使用
// NSDate * dateNow = [NSDate date];
// NSTimeInterval timeZoneOffset = [[NSTimeZone systemTimeZone]secondsFromGMT];
// [dateNow dateByAddingTimeInterval:timeZoneOffset];
// NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]init];
// [dateFormatter setDateFormat:@"日期:yyyy年 MM 月 dd 日 EEEE\n时间:aHH:mm:ss"];
// NSString * afterDate = [dateFormatter stringFromDate:dateNow];
// NSLog(@"\nnowtime = %@",afterDate);
// //获取到现在一段时间间隔的日期
// NSDate * tomorrowDate = [NSDate dateWithTimeIntervalSinceNow:24*60*60];
// NSString * afterDaterTomro = [dateFormatter stringFromDate:tomorrowDate];
// NSDate * yestredayDate = [NSDate dateWithTimeIntervalSinceNow:-24*60*60];
// NSString * afterDateYesday = [dateFormatter stringFromDate:yestredayDate];
// NSLog(@"\ntomorrowdate = %@\nyesterday = %@ ",afterDaterTomro,afterDateYesday);
// } // @autoreleasepool {
// //8 (来自互联网-究竟是不是毫秒)获取自1970年以来的毫秒数的方法 ??????
// NSDate * dateNow = [NSDate date];
// NSTimeInterval time = [[NSDate date] timeIntervalSince1970];
// // NSTimeInterval返回的是double类型,输出会显示为10位整数加小数点加一些其他值
// // 如果想转成int型,必须转成long long型才够大。
// // 将double转为long long型
// long long dTime = [[NSNumber numberWithDouble:time]longLongValue];
// // 输出long long型
// NSString * curTime = [NSString stringWithFormat:@"%llu",dTime];
// NSLog(@"%@",curTime);
// }
//
// @autoreleasepool {
// //9 两个时间判断是否相等 获取时间间隔
// NSDate * dateNow = [NSDate date];//获取当前时间
// NSTimeInterval timeZoneOffset = [[NSTimeZone systemTimeZone]secondsFromGMT];//获取与格林威治时区的时差秒
// [dateNow dateByAddingTimeInterval:timeZoneOffset];//格林威治时区加上时差
// NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]init];//时间格式设置器
// [dateFormatter setDateFormat:@"日期:yyyy年 MM 月 dd 日 EEEE 时间:aHH:mm:ss"];//注意这里的时间设置格式不能写错啦
// NSString * afterTime = [dateFormatter stringFromDate:dateNow];
// NSLog(@"%@",afterTime);
// NSDate * yesterday = [NSDate dateWithTimeIntervalSinceNow:-24*60*60];
// NSTimeInterval timeInterval = [dateNow timeIntervalSinceDate:yesterday];
// NSLog(@"%.f",timeInterval/24/60/60);
// NSTimeInterval timeInterval1970 = [yesterday timeIntervalSince1970];
// NSLog(@"1970年到现在的秒数为%.f",timeInterval1970);
// //比较两个时间(返回一个枚举值)默认为升序
// NSComparisonResult result = [dateNow compare:yesterday];
// if (result != 0) {
// NSLog(@"NSComparisonResult接收的结果是两个时间段不相等");
// }
// BOOL isEqual = [dateNow isEqualToDate:yesterday];
// if (isEqual) {
// NSLog(@"两个日期相等");
// }else{
// NSLog(@"两个日期不相等");
//
// }
// } // @autoreleasepool {
// //10 catergroy 对 NSString 类的方法的扩展
// NSString * str = @"HHH";
// [str sayHi];
// //只能添加方法
// //为 NSString 扩充方法 :获取字符串的首字母并大写
// NSString * oneString = [str getFirstCharacter];
// NSLog(@"获取的首字母为:%@",oneString);
// NSString * newStr = [str change];
// NSLog(@"%@",newStr);
// NSInteger num = 13523526302;
// NSString * newstrnum = [[NSString alloc]init];
// newStr = [str transToString:num];//把 NSInteger 型数字转化为 字符串数字
// NSLog(@"%@",newStr);
// NSInteger nsnum = [newStr stringToValue];//把字符串数字转化为 NSInteger 型数字
// NSLog(@"%ld",nsnum);
// } return ;
}
main.m
//
// NSString+Addition.h #import <Foundation/Foundation.h> @interface NSString (Addition)//这就是一个 NSString 类的 category(类方法的扩展)
-(void)sayHi;
//获取字符串的首字母并以大写的形式
- (NSString *)getFirstCharacter;
//把对应的字符串日期转化为特定的形式@"20150819"--@"2015.08.19"
- (NSString *)change;
//把基本整型转化为字符串类型
- (NSString *)transToString:(NSInteger)num;
//把字符串转化为基本的整型
- (NSInteger)stringToValue;
@end
NSString+Addition.h
//
// NSString+Addition.m
//NSString+Addition.h" @implementation NSString (Addition)
-(void)sayHi{
NSLog(@"我是一个分类方法哦");
}
//获取字符串的首字母并以大写的形式
- (NSString *)getFirstCharacter{
// return [[self substringToIndex:1]uppercaseString];
return [[self substringToIndex:]capitalizedString];
}
//把对应的字符串日期转化为特定的形式@"20150819"--@"2015.08.19"
- (NSString *)change{
// NSDateFormatter * dateFormantter = [[NSDateFormatter alloc]init];
// [dateFormantter setDateFormat:@"日期: yyyy年 MM月 dd日 EEEE 时间:aHH:mm:ss"];
NSMutableString * newString = [NSMutableString stringWithString:self];
if ([self length] < ) {
NSLog(@"长度不够");
}else{
// [str substringToIndex:4];//这是截取字符串的方法,这里搞混了,这里要插入
// [str substringToIndex:7];
NSString * str = @".";
[newString insertString:str atIndex:];
[newString insertString:str atIndex:];
}
return newString;
}
//把基本整型转化为字符串类型
- (NSString *)transToString:(NSInteger)num{
NSString * newstr = [NSString stringWithFormat:@"%ld",num];
return newstr;
}
//把字符串转化为基本的整型
- (NSInteger)stringToValue{
return [self integerValue];
}
@end
NSString+Addition.m
//
// LoginMangage.h
// 08-22Am
// #import <Foundation/Foundation.h> typedef void(^mysuccessblock) (NSString * accuntName);
typedef BOOL(^myfailureblock) (NSString * failure);
@interface LoginMangage : NSObject
-(void)initWithName:(NSString *)name
paswword:(NSString *)password
succe:(mysuccessblock)succes
failure:(myfailureblock)errorMessage; @end
LoginMangage.h
//
// LoginMangage.m
//LoginMangage.h" @implementation LoginMangage
-(void)initWithName:(NSString *)name
paswword:(NSString *)password
succe:(mysuccessblock)succes
failure:(myfailureblock)errorMessage{
if (name == @"user" && password == @"") {
succes(@"登陆成功");
}else{
BOOL result = errorMessage(@"账户名或密码错误");
if (result) {
NSLog(@"错误已经处理");
errorMessage(@"请重置密码");
}else{
NSLog(@"没有处理错误");
errorMessage(@"请联系管理员");
}
}
}
@end
LoginMangage.m
//
// main.m
#import <Foundation/Foundation.h>
#import "Person.h"
#import "DownLoadManager.h"
#import "LoginManage.h" //
int maxValue(int,int);
int maxValue(int a, int b){
return a > b ? a:b;
}
//2 Block变量的访问
int opennum = ;
//3
//4 简单的字符串拼接
//5 使用Block对字符串进行比较(NSComparisonResult)
//6 简单的Block 判断两个数字的大小
//7 对人的一些信息进行排序
//8 block的传值,与回调传值
int main(int argc, const char * argv[]) {
// @autoreleasepool {
// // insert code here...
// NSLog(@"Hello, World!");
// //函数指针
// int (*p)(int,int) = maxValue;
// int max = p(12,48);
// NSLog(@"max = %d",max);
// //block 语句块
// int (^ minOfTwo)(int,int) = ^(int a, int b){
// return a < b ? a : b;
// };
// int minoftwo = minOfTwo(45,4);
// NSLog(@"min = %d",minoftwo);
// } // @autoreleasepool {
// // 2 Block变量的访问
// __block int number = 20;
// void (^myblock)(int) = ^(int a){
// NSLog(@"用_block修饰的实例变量为%d",a);
// number = 100;
// NSLog(@"修改了Block外部定义的可在Block内被修改的数%d",number);
// opennum += 1;
// NSLog(@"全局变量无需用__block修饰就可以在这里被修改为%d",opennum);
// };
// myblock(number);
// } // @autoreleasepool {
//3 Block 拼接字符串
// NSArray * strArr = @[@"Hello",@"UUUU",@"39"];
// NSString *(^appendString)(NSArray *) = ^(NSArray * arr){
// NSString * newstr = @"";
// for (int i = 0; i < [arr count]; i++) {
// NSString * append = arr[i];
// newstr = [newstr stringByAppendingString:append];
// }
// return newstr;
// };
// NSString * strarry = appendString(strArr);
// NSLog(@"拼接之后为:%@",strarry);
// } // @autoreleasepool {
// //4简单的字符串拼接
// NSArray * arr = @[@"Hello",@"IIIII",@"39"];
// NSString * newstr = [[NSString alloc]init];
// NSString * newArr = [[NSString alloc]init];
// for (int i = 0; i < [arr count]; i++) {
// newstr = arr[i];
// newArr = [newArr stringByAppendingString:newstr];
// }
// NSLog(@"%@",newArr);
// }
//
// @autoreleasepool {
// //5 使用Block对字符串进行比较(NSComparisonResult)
// NSComparisonResult (^compareString)(NSString * , NSString *) = ^(NSString * arr1,NSString *arr2){
// NSComparisonResult result = [arr1 compare:arr2];
// if (result == NSOrderedSame) {
// NSLog(@"arr1与 arr2 相等");
// }
// if (result == NSOrderedAscending) {
// NSLog(@"arr1 小于 arr2");
// }
// if (result == NSOrderedDescending) {
// NSLog(@"arr1 大于 arr2");
// }
// return result;
// };
// NSString * arr1 = @"HHHH";
// NSString * arr2 = @"HHH";
// compareString(arr1,arr2);
// } // @autoreleasepool {
// //6 简单的Block 判断两个数字的大小
// void (^ compareTwoNum)(int a,int b) = ^(int a ,int b){
// if (a > b) {
// NSLog(@"第一个数大于第二个数");
// }
// if (a < b) {
// NSLog(@"第一个数小于第二个数");
// }
// if (a == b) {
// NSLog(@"两个数字相等");
// }
// };
// compareTwoNum(12,78);
//
// //Block判断两个NSInteger的类型数字的大小(主义先进行转化为 NSNumber 类型数字)
// NSComparisonResult (^compareNsinterger)(NSInteger ,NSInteger) = ^(NSInteger a, NSInteger b){
// NSNumber * object1 = [NSNumber numberWithInteger:a];
// NSNumber * object2 = [NSNumber numberWithInteger:b];
// NSComparisonResult result = [object1 compare:object2];
//// NSNumber * obj1 = @(a);
//// NSNumber * obj2 = @(b);
// return result;
// };
// NSComparisonResult comresult = compareNsinterger(45,78);
//
// //不可变数组的排序
// NSArray * arr = [NSArray arrayWithObjects:@"hellow", @"TTTTTT", @"39", @"HHHH", @"WWWW", nil];
//// NSMutableArray * mutArr = [NSMutableArray arrayWithArray:arr];
// NSArray * newArray = [arr sortedArrayUsingSelector:@selector(compare:)];
// NSLog(@"默认的升序排列之后为:%@",newArray);
// NSArray * newarr = [arr sortedArrayWithOptions:(NSSortOptions)1 usingComparator:^NSComparisonResult(id obj1, id obj2) {
// return [obj1 compare:obj2];
// }];
// NSLog(@"%@",newarr);
//
// //可变数组的排序
//// NSArray * arr = [NSArray arrayWithObjects:@"hellow", @"JJJJJ", @"39", @"HHH", @"XXXX", nil];
// NSMutableArray * mutArr = [NSMutableArray arrayWithArray:arr];//这里把上面的arr转化为一个可变数组并重新为可变数组开辟空间
// NSMutableArray * mu2arr = [@[@"4",@"3",@"1",@"2"]mutableCopy];//将不可变数组转化为可变数组的mutableCopy方法
// [mutArr sortedArrayUsingSelector:@selector(compare:)];//返回一个排好序的数组
// [mu2arr sortUsingSelector:@selector(compare:)];
// NSLog(@"%@",mutArr);
// NSLog(@"%@",mu2arr);
//// 使用Block可以改变排序的模式
// [mu2arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
// return -[obj1 compare:obj2];//很奇怪上面的两次排序不注释掉的话,这里不能实现降序排序???????是因为这里需要有一个 NSArray 的变量去接收一下就对了
// }];
// NSLog(@"%@",mu2arr);
// } // @autoreleasepool {
// //7 对人的一些信息进行排序
// Person *per1 = [[Person alloc]initWithName:@"KKKKK" age:23 heigeht:1.78];
// Person *per2 = [[Person alloc]initWithName:@"hangtian" age:30 heigeht:1.86];
// Person *per3 = [[Person alloc]initWithName:@"liucuihua" age:34 heigeht:1.72];
// Person *per4 = [[Person alloc]initWithName:@"zhangfeng" age:27 heigeht:1.68];
// Person *per5 = [[Person alloc]initWithName:@"huangjunwei" age:25 heigeht:1.64];
// Person *per6 = [[Person alloc]initWithName:@"zahnghong" age:19 heigeht:1.78];
// Person *per7 = [[Person alloc]initWithName:@"shixiaofei" age:18 heigeht:1.70];
// Person *per8 = [[Person alloc]initWithName:@"liusi" age:24 heigeht:1.75];
// NSArray * perArr = [NSArray arrayWithObjects:per1,per2,per3,per4,per5,per6,per7,per8, nil];
//// NSArray * newPerArr = [perArr sortedArrayUsingSelector:@selector(compare:)];//方法一
// NSArray * newPerArr = [perArr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
//// return [[obj1 name] compare:[obj2 name]];//name升序排序
//// return [@([obj1 age]) compare:@([obj2 age]) ];//按照年龄升序排序
//// return [@([obj1 height])compare:@([obj2 height])];//按照升高升序排序
// return [@([obj2 age]) compare:@([obj1 age])];
// }];
// NSLog(@"按年龄降序排序后为:%@",newPerArr);
// } // @autoreleasepool {
// //8 block的传值,与回调传值
// DownLoadManager * down = [[DownLoadManager alloc]init];
// [down download:^int(int n) {
// NSLog(@"得到数字:%d",n);
// return 45;//这里想用回调返回数字
// }];
// LoginManage * login = [[LoginManage alloc]init];
// [login loginWithname:@"user" password:@"123456" success:^(NSString *accountName) {
// NSLog(@"%@",accountName);
// } failure:^BOOL(NSString *errorMessage) {
// NSLog(@"%@",errorMessage);
// return 0;
// NSLog(@"%@",errorMessage);
// }];
// } return ;
}
main.m
// #import <Foundation/Foundation.h> @interface Person : NSObject
{
NSString *_name;
NSInteger _age;
CGFloat _height;
}
//@property NSString * address; -(void)setName:(NSString *)name;
-(NSString *)name;
-(void)setAge:(NSInteger)age;
-(NSInteger)age;
-(void)setHeight:(CGFloat)_height;
-(CGFloat)height;
//初始化
-(id)initWithName:(NSString *)name
age:(NSInteger)age
heigeht:(CGFloat)height;
//便利构造器
+(Person *)personWithName:(NSString *)name
age:(NSInteger)age
height:(CGFloat)height;
-(NSString *)description;
@end
Person.h
//
// Person.m #import "Person.h" @implementation Person -(void)setName:(NSString *)name{
_name = name;
}
-(NSString *)name{
return _name;
}
-(void)setAge:(NSInteger)age{
_age = age;
}
-(NSInteger)age{
return _age;
}
-(void)setHeight:(CGFloat)height{
_height = height;
}
-(CGFloat)height{
return _height;
}
//初始化
-(id)initWithName:(NSString *)name
age:(NSInteger)age
heigeht:(CGFloat)height{
self = [self init];
if (self) {
_name = name;
_age = age;
_height = height;
}
return self;
}
//便利构造器
+(Person *)personWithName:(NSString *)name
age:(NSInteger)age
height:(CGFloat)height{
Person * per = [[Person alloc]initWithName:name age:age heigeht:height];
return per;
}
-(NSString *)description{
return [NSString stringWithFormat:@"name:%@ age:%ld height:%.2f",_name,_age,_height];
}
@end
Person.m
//
//
#import <Foundation/Foundation.h> typedef int (^myBlock) (int n);
typedef void (^myBlock1) (int n,int b);
@interface DownLoadManager : NSObject -(int)download:(myBlock)block;
-(void)chuanzhi:(myBlock1)block1; @end
DownLoadManager.h
//
// DownLoadManager.m
//
#import "DownLoadManager.h" @implementation DownLoadManager -(int)download:(myBlock)block{
NSLog(@"已经传值");
return block();
}
-(void)chuanzhi:(myBlock1)block1{ } @end
DownLoadManager.m
//
// LoginManage.h
//
#import <Foundation/Foundation.h> typedef void(^successfulBlock) (NSString *accountName);
typedef BOOL(^failureBlook) (NSString *errorMessage);
@interface LoginManage : NSObject
-(void)loginWithname:(NSString *)name
password:(NSString *)password
success:(successfulBlock)success
failure:(failureBlook)failure;
@end
LoginManage.h
//
// LoginManage.m
//
#import "LoginManage.h" @implementation LoginManage
-(void)loginWithname:(NSString *)name
password:(NSString *)password
success:(successfulBlock)success
failure:(failureBlook)failure{
if ([name isEqualToString:@"user"] && [password isEqualToString:@""]) {
NSLog(@"登陆成功");
success(name);
}
else{
BOOL result = failure(@"账户或密码错误");
if (result) {
NSLog(@"错误已经处理");
failure(@"请你重设登录密码");
}
else{
NSLog(@"错误没有处理");
NSLog(@"请尽快联系管理员重置密码");
}
}
}
@end
LoginManage.m
OC: Block回调的使用demo的更多相关文章
- Objective-C中的Block回调模式
在前面的博客中提到了Block的概念和使用方法,个人感觉Block最爽的用法莫过于在回调时用block.感觉比委托回调和目标方法回调用着要顺手,好不好用还得读者亲自用一下才知道.如果 读者之前用过SS ...
- 代码块(Block)回调一般阐述
本章教程主要对代码块回调模式进行讲解,已经分析其他回调的各种优缺点和适合的使用场景. 代码块机制 Block变量类型 Block代码封装及调用 Block变量对普通变量作用域的影响 Block回调接口 ...
- OC3大回调模式使用总结(三)block回调
OC 3大回调模式使用总结(三)block回调 block 又称 代码块,闭包等 是一个匿名的函数,它能够当做一个对象来使用,仅仅只是这个对象非常特殊,是一段代码,他能够保存你写的一段预备性质代码,待 ...
- flutter block回调
block回调在oc中很常见,到了flutter中仍然有block回调 自定义一个StatefulWidget PageTitle 无参数回调VoidCallback VoidCallback onT ...
- iOS 键盘添加完成按钮,delegate和block回调
这个是一个比较初级一点的文章,新人可以看看.当然实现这个需求的时候自己也有一点收获,记下来吧. 前两天产品要求在工程的所有数字键盘弹出时,上面带一个小帽子,上面安装一个“完成”按钮,这个完成按钮也没有 ...
- Block回调
•Block的定义 •Block.委托.通知.回调函数,它们虽然名字不一样,但是原理都一样,都是"回调机制"的思想的具体实现 •前面的代理模式的项目改为Block回调实现 ...
- iOS - OC Block 代码块
前言 Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的,类似于一个 ...
- UIAlertController——之Block回调
iOS8.0之后出现的提示框 =.=,比自己去改block回调要好.
- 第十篇、自定义UIBarButtonItem和UIButton block回调
// 自定义导航栏左边按钮 self.navigationItem.leftBarButtonItem = [JQBlockedBarButtonItem blockedBarButtonItemWi ...
随机推荐
- struts2拦截器配置;拦截器栈;配置默认拦截器;拦截方法的拦截器MethodFilterInterceptor;完成登录验证
struts2.xml 内容 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts ...
- string tips
1. .net文档中说,split 比 indexOf 消耗更多的性能.在as3中经过本人测试,这个结论一样成立.而且,字符串越长,split和indexOf的差距就越明显!!所以,能用indexOf ...
- RabbitMQ链接不上异常
链接代码 项目启动报的异常 本地main方法链接报的异常 网上查询原因 问题说明及解决方案: 网上原因很多,最终原因都是连接不到数据库造成的. 1.查看防火墙 2.tomcat端口是否屏蔽 3.查看连 ...
- 【转】搭建Python的Eclipse开发环境之安装PyDev插件--离线安装
原文网址:http://blog.csdn.net/wangpingfang/article/details/7181223 使用update site安装pydev插件 注意:该安装指南针对ecli ...
- 为什么Jquery对input file控件的onchange事件只生效一次
今天在做jquery对input file控件的onchange事件进行监听,就一直只生效一次,不知道Jquery为什么对file控件没有做到每次改变触发onchange事件的效果,但是还是有好几种解 ...
- myeclipse svn配置
在MyEclipse 9.0中安装SVN插件遇到一些问题,参考网上一些方法,最终解决.以下是个人认为比较简易的方法,供参考: 安装过程: (1)svn的插件版本site-1.8.14.zip(可根据自 ...
- C#读写文件总结
1.使用FileStream读写文件 文件头: using System; using System.Collections.Generic; using System.Text; using ...
- 高薪诚聘.NET MVC开发工程师
你想有大好的发展前途吗?你想拥有高的月薪吗? 赶快来吧! 1.企业网站.电子商务开发: 2.进行详细设计.代码开发,配合测试,高质量完成项目: 3.参与技术难题攻关.组织技术积累等工作. 任职资格: ...
- <javascript搞基程序设计>笔记2015-9-25
1.一元加减 var a=28; alert(--a); //27,先减后用 alert(a--); //27,先用后减 alert(a); //26, 2.位操作符 按位非(NOT):按位取反:符号 ...
- vim开发环境配置
一.大饱眼福 看了效果图,肯定有人说, 这都有啥功能?就花哨? 告诉你,你说花哨就错了,开玩笑?我们程序猿可都是实打实的人,说谎都不会,咋会忽悠人呢. 下面我来告诉你,这都有些什么功能: 文件索引功能 ...