obj-c8[block语法]

Block语法  块语法,本质上是匿名函数(没有名称的函数)C++、JS、Swift等语言,有类似语法,叫做闭包

//Block 的作用,主要是用于回调函数,解耦合

//当方法的参数是block类型,block的参数用户从内向外传值;block的返回值,用于,从外向内返回结果

#import <Foundation/Foundation.h>

#import "XunleiDownload.h"

#import "LoginManager.h"

#import "Person.h"

//int maXValue(int a, int b);
//int maXValue(int a, int b)
//{

//    return a > b ? a : b;

}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
       
        //Block语法  块语法,本质上是匿名函数(没有名称的函数)C++、JS、Swift等语言,有类似语法,叫做闭包
       
//        int (*p)(int, int) = maXValue;
//        int result = p(10, 14);
//        NSLog(@"result = %d",result);
       
        //block本质是一个匿名函数,可以通过block把一个函数定义成一个变量
       
       // BOLCK和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样。
        //int (^)(int,int) block变量类型
        //myblock 变量名
        //变量的值(值是一个匿名函数)
        //int (int a, int b)
        //{
        //    return a > b ? a : b;
        //};//[有分号;]

//        int (^myBlock)(int, int) = ^int (int a, int b)
//        {
//            return a > b ? a : b;
//        };
//        int result = myBlock(15, 10);
//        NSLog(@"%d",result);
       
       
//        int (^myblock)(int) = ^int (int a)
//        {
//            int b = a * a;
//            return b;
//        };
//        int result = myblock(5);
//        NSLog(@"%d",result);
//       
        //无参无返回值
        //void (^helloBlock)(void) = ^void (void)
        //给block赋值的匿名函数,返回值类型可以直接省略不写,如果没有参数,参数列表也可以省略
//        void (^helloBlock)() = ^
//        {
//           NSLog(@"hello, world!");
//        };
//        helloBlock();
       
//        NSArray (^array)(int a) = ^(int a)
       
//        int (^stringForInt)(NSString *) = ^int (NSString * a){
//            int b = [a intValue];
//            return b;
//        };
//        int result = stringForInt(@"59");
//        NSLog(@"%d", result);
       
       
//        NSString * (^myBlock) (NSString *, NSString *) = ^NSString * (NSString * a, NSString * b){
//            NSArray * str = [a componentsSeparatedByString:b];
//            NSString * str1 = [str firstObject];
//            return str1;
//        };
//        NSString * getting = myBlock(@"www.baidu.com",@".c");
//        NSLog(@"%@",getting);
       
        //NSArray * array = [NSArray arrayWithObjects:@"henan", @"lanou", @"ios", @"17ban", nil];
       
//        NSString * (^myBlock)(NSArray *) = ^NSString * (NSArray * b){
//            NSString * str = @"";
//            for (int i = 0; i < [b count]; i++) {
//              str = [str stringByAppendingString:[b objectAtIndex:i]];
//            }
//            return str;
//        };
//        //NSArray * array = [NSArray arrayWithObjects:@"河南", @"蓝欧", @"ios", @"17班", nil];
//        NSString * string = myBlock([NSArray arrayWithObjects:@"河南", @"蓝欧", @"ios", @"17班", nil]);
//        NSLog(@"%@",string);
       
       
//         NSString * (^appendString)(NSArray *) = ^(NSArray * array){
//         NSMutableString * string = [NSMutableString stringWithCapacity:1];
//         for (NSString * str in array) {
//         [string appendString:str];
//         }
//         return string;
//         };
//        NSString * string1 = appendString([NSArray arrayWithObjects:@"河南", @"蓝欧", @"ios", @"17班", nil]);
//               NSLog(@"%@",string1);

//         NSString * (^appendString)(NSArray *) = ^(NSArray * array){
//         NSString * string = @"";
//         for (NSString * str in array) {
//         string = [string stringByAppendingString:str];
//         }
//         return string;
//         };
//       
//        NSString * string1 = appendString([NSArray arrayWithObjects:@"河南", @"蓝欧", @"ios", @"17班", nil]);
//        NSLog(@"%@",string1);
       
//        NSString * (^appendString)(NSArray *) = ^(NSArray * array){
//            NSString * string = @"";
//            for (NSString * str in array) {
//                string = [NSString stringWithFormat:@"%@%@", string, str];
//            }
//            return string;
//        };
//       
//        NSString * string1 = appendString([NSArray arrayWithObjects:@"河南", @"蓝欧", @"ios", @"17班", nil]);
//        NSLog(@"%@",string1);
       
      
       
//        XunleiDownload * dow = [[XunleiDownload alloc] init];
////        [dow download:^(int n) {
////            NSLog(@"绘制 %d 个矩形", n);
////        }];
//        [dow download:^(int n) {
//            NSLog(@"添加 %d 个圆", n);
//        }];
       
       
//        LoginManager * manager = [[LoginManager alloc] init];
//        [manager loginWithName:@"zhangsan" password:@"123456" successful:^(NSString *userName) {
//           // NSLog(@"显示用户名信息,用户名是%@",userName);
//           
//            NSLog(@"%@ 发小纸条",userName);
//        }];
       
//        LoginManager * manager = [[LoginManager alloc] init];
//        [manager loginWithName:@"zhangsan" password:@"123456" successful:^(NSString *userName) {
//            NSLog(@"%@ 发小字条",userName);
//        } failure:^(NSString *userName) {
//            NSLog(@"用户名 %@ 不存在",userName);
//        }];
       
      //  LoginManager * manager = [[LoginManager alloc] init];
//        [manager loginWithName:@"zhangsan" password:@"12345" successful:^int(NSString *userName) {
//            NSLog(@"%@ 发小字条",userName);
//        } failure:^BOOL(NSString *errorMassage) {
//            NSLog(@"%@",errorMassage);
//            return NO;
//        }];
       
//        [manager loginWithName:@"zhangsan" password:@"123456" successful:^void(NSString *userName) {
//            NSLog(@"%@ 发小字条",userName);
//        } failure:^BOOL(NSString *errorMassage) {
//            NSLog(@"%@",errorMassage);
//            return YES;
//        }];
       
       
       
//        NSArray * array = [NSArray arrayWithObjects:@"zhangsan", @"lisi", @"wanwu", @"cuiyayun", @"yingsasa", nil];
//        NSArray * newArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
//            return [obj1 compare:obj2];
//        }];
//        NSLog(@"%@",newArray);
       
        /*
        Person * p1 = [[Person alloc] initWithName:@"zhansan" sex:@"M" age:@"19"];
        Person * p2 = [[Person alloc] initWithName:@"lisi" sex:@"M" age:@"26"];
        Person * p3 = [[Person alloc] initWithName:@"yangliu" sex:@"W" age:@"22"];
        Person * p4 = [[Person alloc] initWithName:@"heinei" sex:@"W" age:@"20"];
        Person * p5 = [[Person alloc] initWithName:@"wangwu" sex:@"M" age:@"17"];
        NSArray * array = [[NSArray alloc] initWithObjects:p1, p2, p3, p4, p5, nil];
        NSArray * newArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            Person * per1 = (Person *)obj1;//强转类型
            Person * per2 = (Person *)obj2;
            if (per1.age < per2.age) {
                return NSOrderedAscending;
            }else if (per2.age < per1.age){
                return NSOrderedDescending;
            }
            return NSOrderedSame;
        }];
        NSLog(@"%@",newArray);

*/

__block int m = 3;
        //在block中使用block以外的变量,是只读的,要想该变量能在block中被修饰,使用__block进行修饰
        void (^printNumberBlock)(int a) = ^(int a){
            m = m * a;
            NSLog(@"%d",m);
        };
       
        printNumberBlock(5);
       
    }
    return 0;
}

时间: 2024-10-15 20:45:43

obj-c8[block语法]的相关文章

Block语法(1)

1. 为什么要使用block. 我们知道,对象与对象之间的通信方式有以下三种:1.代理-协议:2.通知:3.block.三种方式都实现了对象之间的解耦合.其中不同就是:通知的通信方式是1对多:代理.block的通信方式是1对1. 2.Block的简介. Block是iOS4.0之后新增的一种语法结构,也成为“闭包”. SDK4.0新增的API大量使用了block Block是一个匿名的函数代码块,此代码块可以作为参数传递给其他对象. 3. Block的使用 //int 是返回值:sumBlock

从C语言的变量声明到Objective-C中的Block语法转载]

原文:From C Declarators to Objective-C Blocks Syntax 作者:Nils Hayat 译者:CocoaChina--sunshine 在这篇文章中,从简单的C语言中各种声明开始,以及复杂的声明组合,到最后Objective-C中的代码块bokck的语法. 花一些时间去了解代码块(block)衍生和组织形式,一旦明白了这些,就可以很方便的声明和使用它,而不用每次需要的时候才去Google一下. 如果你想把能想到的东西用block声明表现出来,请继续阅读!

OC --(6)-- Block、数组高级:Block语法、Block使用、Block实现数组排序

1.Block定义 Block:块语法,本质上是匿名函数(没有名称的函数) 标准C?里?面没有Block,C语言的后期扩展版本,加入了匿名函 数. C++.JS.Swift等语?言,有类似语法,叫做闭包. Block语法和函数指针很相似.

Block 语法练习

//函数是具有特定功能的代码段 //一个严格的函数, 包括函数声明, 函数定义, 函数调用 //block块儿语法, 是在函数内部,定义一个block, block块执行效率比较高 //函数指针指向函数首地址, 这样指针就可以调用函数 //函数指针类型的重命名 //typedef 函数返回值类型(*新函数名) () //block块儿语法 //返回值类型(^块儿语法名)(参数类型1, 参数名1 参数类型2, 参数名2, ....)() //参数类型与参数名之间用空格隔开, 两个参数之间用逗号隔开

OC中Block语法、Block使用以及通过Block实现数组排序

Block:语法块,本质上是匿名函数(没有名称的函数) 标准C里面没有Block,C语言的后期扩展版本,加入了匿名函数 在C++.JS.Swift等语言有类似语法,叫做闭包 Block语法和C语言里的函数指针很相似,下面我们先来回顾下C语言中的函数和函数指针 C语言中函数是指:实现某一功能的代码段 完整的函数包括两部分:函数声明.函数定义 函数声明,即函数原型.例如:int sum (int x,int y);具有两个整形参数,一个整形返回值的函数 函数定义,即函数实现.例如:int sum(i

块语法Block在MVC思维的妙用之多重M层代理传值

注:以下代码均来自真实项目案例. 在项目开发中,经常避免一些与系统工具交互的功能需求.比如说开启蓝牙,开启相机,通讯录功能,还有数据加密等等. 由于这些功能的实现没有实例化的必要,并且又是许多项目都共用的功能,所以一般我们会作为类的静态方法去作为自己的工具类. 以下是一段将字典的键值对导入通讯录的静态方法代码. 假如说现在有一个这样的逻辑流程,C层按钮交互,将页面某个数据加密导入通讯录. 让我们以MVC的思维梳理一下整过流程. 在这整个事件中,有三个参与者.页面(C层),加密(M层),通讯录导入

Objective-C Block方法与笑笑语法

#pragma mark - block语法 NSLog(@"========block方法1==========="); [students sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { Student *stu1 = (Student *)obj1;//这里的obj1就是Student类型的 Student *stu2 = (Student *)obj2; NSLog(@"%ld",[st

关于Block初识与自己的认识

前些天学到了Block,对于Block有了一些大致的认识 Block是什么? 我认为是一些行为的封装  举个例子  要将两个参数进行加减乘除    创建4个Block实现价钱乘除四个操作即可   用一个方法  传两个参数和一个block  返回就是block对这两个参数的操作 代码演示 1 #import <Foundation/Foundation.h> 2 #import "Calc.h" 3 int main(int argc, const char * argv[]

OC高级编程——深入block,如何捕获变量,如何存储在堆上

首先先看几道block相关的题目 这是一篇比较长的博文,前部分是block的测试题目,中间是block的语法.特性,block讲解block内部实现和block存储位置,请读者耐心阅读.具备block基础的同学,直接调转到block的实现 下面列出了五道题,看看能否答对两三个.主要涉及block栈上.还是堆上.怎么捕获变量.答案在博文最后一行 //-----------第一道题:-------------- void exampleA() { char a = 'A'; ^{ printf("%