OC第六講 Block,語法糖

2021-07-05 14:57:48 字數 4567 閱讀 3148

一:

////  main.m

#import

#import "student.h"

//函式宣告

int maxvalue (int a, int b);

//函式定義

int maxvalue (int a, int b)

//函式指標型別

//int (*)(int, int);

//函式指標變數

int (*aaa)(int, int) = null;

//重新命名資料型別

typedefint (*aaa) (int, int);

//函式指標變數;i

aaa aa = null;

int main(int argc, const char * argv)

//注:1.引數名不能夠省略

//2.如果block有返回值型別, 需要使用return返回資料

blockname = ^(int a, int b);

int (^blockname1)(int, int) = ^(int a, int b);

//block的使用(呼叫block)

//block名字(實參1, 實參2, ...)

nslog(@"%d",blockname1(4, 9)) ;

//注: block定義時, block塊中的**不會執行, block呼叫時block塊中的**才會執行!

//定義乙個block, 實現列印"hello,world!"

void (^blockprint)();

blockprint = ^();

blockprint();

//寫乙個返回值為整型引數為nsstring (僅乙個引數)的功能,現將字串轉換為整型的功能

int (^convert)( nsstring *) = ^(nsstring *str);

int a = convert(@"5我1愛2你3");

nslog(@"%d",a );//5

//block的應用

//1.使用typedef重新命名block型別

typedef int (^blocktype)(nsstring *);

blocktype convert1 = ^(nsstring *str);

int b = convert1(@"564545");

nslog(@"%d",b);

//2.內部訪問變數

//注: a.block內部可以訪問區域性變數,但是不能修改區域性變數,想要修改全域性變數, 需要在變數前加修飾符__block

可以訪問並修改全域性變數

__block int a1 = 10;

void (^print)()=^();

print();

print();

print();

print();

print();

作為方法的引數

nsarray *namearray = [nsarrayarraywithobjects:@"zhangsan",@"lisi",@"wangwu",@"zhaoliu", nil];

nsarray *sortarray = [namearraysortedarrayusingselector:@selector(compare:)];

nslog(@"%@",sortarray);

nsarray *numberarray= [nsarray arraywithobjects:@"1",@"2",@"3",@"21",nil];

//只能排10以下

nsarray *sortarray1 = [numberarraysortedarrayusingselector:@selector(compare:)];

nslog(@"%@",sortarray1);

//完善的排序

nsarray *sortarray2 = [numberarraysortedarrayusingcomparator:^nscomparisonresult(nsstring *obj1, nsstring  *obj2) else if([obj1 intvalue]==[obj2 intvalue])else

}];nslog(@"%@",sortarray2);

// nsarray *floatarray = [nsarray arraywithobjects:@"2.3", @"5.8",@"54.45",@"545.2", nil];

//使用block對陣列進行降序排列

student *student = [studentstudentwithname:@"wsan"number:56score:15.23];

nslog(@"%@",student.name);

nslog(@"%@",[student description]);

student *student1 = [student studentwithname:@"esi" number:15score:45.2323];

student *student2 = [student studentwithname:@"awu" number:45score:51.323];

nsarray *stuarray = [[nsarray alloc]initwithobjects:student,student1,student2,nil];

//按照學號由高到底進行排序

nsarray *sortarray8 = [stuarraysortedarrayusingcomparator:^nscomparisonresult(student *obj1, student*obj2) else if(obj1.number ==obj2.number)else

}];for (student *temp in sortarray8)

//姓名從a-z

nsarray *sortarray9 = [stuarraysortedarrayusingcomparator:^nscomparisonresult(student *obj1,student *obj2) else if(obj1.name == obj2.name)else

return [obj1.name compare:obj2.name];

}];for (student *temp1 in sortarray9)

////語法糖

//100

nsnumber *n = [nsnumbernumberwithinteger:100];

nsnumber *n1 = @100;

nsstring *string = [[nsstring alloc]initwithstring:@"123"];

nsstring *string1 = @"123";

nsarray *arr = [nsarray arraywithobjects:@"a",@"b", nil];

nsarray *arr1 = @[@"a", @"b",@"c"];

nslog(@"%@",[arr1 objectatindex:2]);

nslog(@"%@",arr1[2]);

nsdictionary *dic = [nsdictionarydictionarywithobjectsandkeys:@"111",@"1",@"2",@"222", nil];

nsdictionary *dic1 = @;

nslog(@"%@",[dic objectforkey:@"2"]);

nslog(@"%@",dic[@"2"]);

return0;

}​二:

////  student.h

#import

@inte***ce student : nsobject

//姓名, 學號, 分數

//遍歷構造器, 自定義初始化方法

@property (nonatomic,retain)nsstring *name;

@property nsinteger number;

@propertycgfloat score;

- (id)initwithname:(nsstring *)name number:(nsinteger)number score:(cgfloat)score;

+ (id)studentwithname:(nsstring *)name number:(nsinteger)number score:(cgfloat)score;

//輸出資訊

- (void)sayhi;

@end

​三://

//  student.m

#import "student.h"

@implementation student

- (id)initwithname:(nsstring *)name number:(nsinteger)number score:(cgfloat)score

return self; }

+ (id)studentwithname:(nsstring *)name number:(nsinteger)number score:(cgfloat)score

- (nsstring *)description

@end

OC第六天 Block 陣列 級

block語法 block 塊語法,本質上是匿名函式 沒有名稱的函式 標準c 沒有block,c語 的後期擴充套件版本,加 了匿名函 數。c js swift等語 有類似語法,叫做閉包。block語法和函式指標很相似。匿名函式 沒有名稱的函式 int block int a,int b int in...

OC特有語法 Block

block 與函式指標的比較 有點像函式指標,可以作為引數傳遞,作為函式返回值 函式指標 void mypoint test 指向函式的指標。儲存函式名代表的指標變數 mypoint block 彌補了指向函式的指標不能夠直接儲存乙個函式體 void myblock 1 定義block變數 int ...

OC 第六講 通訊錄作業

實現中等難度通訊錄。需求 1 定義聯絡人類addresscontact。例項變數 姓名 拼音,首字母大寫 性別 號碼 住址 分組名稱 年齡。方法 自定義初始化方法 姓名 號碼 顯示聯絡人資訊 2 在main.m中定義字典,分組管理所有聯絡人。分組名為26個大寫的英文本母。3 可以新增聯絡人物件,如果...