zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    java基础,集合,ConcurrentHashMap,JDK1.7理解
    单例的几种方式,以及如何破坏单例,使用枚举保护单例;
    测试一软件测试基础知识总结
    spring cloud gateway(三、实现限流)
    gateway(二、过滤器)
    spring cloud gateway
    spring cloud zuul网关
    进入mysql方法
    spring cloud consul 服务治理
    多模块项目之坑
  • 原文地址:https://www.cnblogs.com/as5346/p/4469611.html
Copyright © 2011-2022 走看看