• OC 学习第六天(敲代码时遇到的一些错误)


    1.如何定义block

    等号左边是声明  等号右边是实现。

    声明部分:先写返回值类型 然后(Block)然后(参数名);一定要括号括起来

    实现部分: ^托字符  返回值类型

    2.block 如何应用  :数组排序

     应该注意的问题:

    1 进行比较的时候用的是“对象”

    比如:

    Student *stu1 = [[Student alloc]initWithName:@"wangbadan" withSex:@"nan" withAge:13 withScore:77 withNumber:3];

    NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3 ,nil ];

     注意这里用的时stu1(对象)     而不是@"stu1"

    2 进行不改变的比较时,是有返回值类型的

    array = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2)

    如果写成这样是错误的:

    [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2)

     因为sortedArrayUsingComparator的返回值类型是一个数组,所以必须用一个数组来接收它。从输出的结果来看没有进行任何排序

    3 思考(for in)循环输出

    4 做项目时候会用到的:

      //block是使用C语言里面结构体实现的(放在做项目的时候可以去研究)

        NSInteger __block  count = 0;(block前面加两个横杠)

    //    NSInteger count = 0;

        

        NSInteger (^stringBlock)(NSString *)= ^NSInteger(NSString *string){

            NSInteger number = [string integerValue];

           count++;//block内部拷贝过程,把一个局部变量拷贝过来当做常量来使用(这个写法是改变了block,如果不在上面添加NSInteger __block  count = 0;来实现的,如果不添加就是错误的。)

            countNumber = countNumber-5;

            //    全局变量可以在block内部进行使用,也可以进行修改

            number =number +count+countNumber;

            return number;

        };

        

        

        NSInteger result= stringBlock(@"3");

        NSLog(@"%lu",result);

        

        

    //    如果想改变block的局部变量,在它的上面写上__block

  • 相关阅读:
    redis 一主二从三哨兵
    java 调用axis2 webservice
    oracle 自增ID
    yum安装命令的使用方法
    SLES 10安装Oracle10gR2笔记
    信息系统集成资质等级评定条件(暂行)
    ionic imgBase64
    IOS 断点下载
    IOS JSON
    citrix更换vcenter后所需改动几张表
  • 原文地址:https://www.cnblogs.com/as5346/p/4469611.html
Copyright © 2020-2023  润新知