• Pointer is missing a nullability type specifier (__nonnull or __nullable)


    我们都知道在swift中,可以使用!和?来表示一个对象是optional的还是non-optional,如view?和view!。而在Objective-C中则没有这一区分,view即可表示这个对象是optional,也可表示是non-optioanl。这样就会造成一个问题:在Swift与Objective-C混编时,Swift编译器并不知道一个Objective-C对象到底是optional还是non-optional,因此这种情况下编译器会隐式地将Objective-C的对象当成是non-optional。

    为了解决这个问题,苹果在Xcode 6.3引入了一个Objective-C的新特性:nullability annotations。这一新特性的核心是两个新的类型注释:__nullable__nonnull。从字面上我们可以猜到,__nullable表示对象可以是NULL或nil,而__nonnull表示对象不应该为空。当我们不遵循这一规则时,编译器就会给出警告。

     1 typedef enum : NSUInteger {
     2     LoadTypeNew, ///下拉刷新,加载最新数据的状态
     3     LoadTypeMore,  /// 上拉刷新,加载更多数据的状态
     4     LoadTypeSearch /// 控制器搜索数据的状态
     5 } LoadType;
     6 
     7 //这个block , 用来解决是不是已经把数据加载完成了(没有更多的数据了)
     8 typedef void(^SuccessWithLastBlock)(_Nonnull id success, BOOL last);
     9 
    10 //这个block , 用来解决请求数据出错的情况(包含error 信息 和服务器返回的错误信息,error为空 ,即为服务器错误)
    11 typedef void(^ErrorMsgBlock)( NSError * _Nullable error,id _Nullable msgBody);
    12 
    13 @interface QKYBasicDataController : NSObject
    14 
    15 
    16 @property (nonatomic,strong,nonnull)SuccessWithLastBlock successWithLastBlock; //默认的成功的回调
    17 @property (nonatomic,strong,nonnull)SuccessBlock successBlock; //默认的成功的回调
    18 @property (nonatomic,strong,nonnull)ErrorMsgBlock errorMsgBlock;  //默认的失败的回调
    19 
    20 
    21 // 传入交互的Block块,这个只是提供一般的例子,在具体的DataController中为了增加可读性,需要自定义
    22 -(void)requestDatasWithSusscessBlock: (_Nullable SuccessBlock ) successBlock ErrorMsgBlock:(_Nullable ErrorMsgBlock )errorMsgBlock;
    23 @end

    上边的代码是一个基础ViewModel的代码,在使用block的时候只要加上这两个属性 进行说明就不会有警告了

  • 相关阅读:
    Java基础——原码, 反码, 补码 详解
    为什么Java byte 类型的取值范围是-128~127
    JAVA 各种数值类型最大值和最小值 Int, short, char, long, float,&nbs
    JDK config
    为什么要设置Java环境变量(详解)
    什么是JAR包?
    如何用python将一个时间序列转化成有监督学习
    ImportError: numpy.core.multiarray failed to import
    搭建SDN网络——mininet
    回溯法解决最大团问题
  • 原文地址:https://www.cnblogs.com/machao/p/5159553.html
Copyright © 2020-2023  润新知