OC第六讲
//快捷键系统键加逗号,调背景颜色
//
#import <Foundation/Foundation.h>
//课前定义个指针求和
int sum(int x,int y){
return x+y;}
int main(int argc,constchar * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
// Block(据说是重难点) 数组高级
/*
Block:块语法,本质上是匿名函数(没有名称的函数)
标准C里面没有匿名函数,在C语言后期的版本中才加入了匿名函数
在c++,js,swift中也有类似语法,叫做闭包
Block和函数指针很相似
*/
/*
//定义返回两个数之和的指针,
int (*k)(int x,int y);
k = sum;
NSLog(@"k = %d",k(1,1));
*/
int mulitipier = 7;
int (^myfirstBlock)(int) = ^int/*这个int可以省略*/(int num/*num这个名字可以随便给哦,但别与系统关键字重复就好*/){return num * mulitipier; };
/*
int : block块的返回值类型
(^myBlock) : ^是block类型标示符,myfirstBlock是块语法的名字
(int) : 括号内是block的参数类型可以有多个参数或者是没有参数;没有参数用void(其实不写也行)
= : 等号右边是定义块对象的语法结构(相当于函数的定义),然后给myfirstblock的返回值赋值
^ : block类型的标示符
int : block类型的返回值
(int num) : 参数列表,这个地方必须有参数名
{} : block内部实现
; : 不要忘记以分号结尾(大括号内也有分号)
block类型 : int(^)int
block变量名 : myfirstblock
block值 : ^(int) (int num){return num * 7}
^返回值类型(参数名){函数体};其实返回值类型可以省略
*/
//block调用
int a = myfirstBlock(7);
NSLog(@"a = %d",a);
/*找的博客:
链接:http://www.cnblogs.com/wayne23/p/4026313.html
*/
//无返回值无参
// void (^myBlock)(void);
void (^myBlock1)(void) = ^void(void){NSLog(@"这是一个无返回值无参的block");};
//调用。当block没有参数的时候也需要在block变量名后面加上括号
myBlock1();
//无返回值有参
void (^lllBlock1)(int) = ^(int num){};
//有返回值无参
// int (^kkkblock)(void) = ^int(void){return 1212;};
NSInteger (^cccblock)(void) = ^NSInteger(void){return 1111;};
NSLog(@"cccblock = %lu",cccblock());
//有返回值有参
NSString *(^aaablock)(NSString *) = ^NSString *(NSString *str){
NSString * resultstr =
[str stringByAppendingString:@"hello"];
return resultstr;
};
NSString *str = aaablock(@"word");
NSLog(@"str = %@",str);
/*
void (^myBlock1)(void); //无返回值,无参数
void (^myBlock2)(NSObject, int); //有返回值,有参数
NSString* (^myBlock3)(NSString* name, int age); //有返回值和参数,并且在参数类型后面加入了参数名(仅为可读性)
*/