自定义UIView:对initWithFrame和initWithCoder方法的覆盖的Xcode可空性警告

时间:2017-05-02 17:11:38

标签: ios objective-c iphone xcode cocoa-touch

我正在实施自定义UIView,并希望覆盖UIView的两个初始值设定项,因此我将其声明完全按照UIView.h中的CustomUIView.h复制到我的- (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER; - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;

isButtonToggle(x):void{
switch(x){
  case 1:
    this.buttonClicked1 = !this.buttonClicked1  
    if(this.buttonClicked2 = true){
        this.buttonClicked2 = !this.buttonClicked2;
    }
    break;
  case 2:
    this.buttonClicked2 = !this.buttonClicked2;
    if (this.buttonClicked1 = true){
        this.buttonClicked1 = !this.buttonClicked1;
    }
    break;
}

但是在构建过程中,Xcode分别显示了这两行的警告:

  

CustomUIView.h:13:4:指针缺少可空性类型说明符   (_Nnnull,_Nullable或_Null_unspecified)
  CustomUIView.h:14:49:指针缺少一个可空性类型说明符(_Nonnull,_Nullable,   或_Null_unspecified)

为什么我会收到这些警告,如果声明来自Cocoa框架源以及如何正确修复它们?

1 个答案:

答案 0 :(得分:0)

我想我已经明白了。

在整个Cocoa .h文件中,分别在开头和结尾有NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END个宏用法,这使得方法声明中的所有指针都不是nonnull使用可为空性注释明确标记(nonnullnullable)。

将这些宏添加到我的CustomUIView.h后,XCode警告消失了:

NS_ASSUME_NONNULL_BEGIN

@interface CustomUIView : UILabel

- (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;

@end

NS_ASSUME_NONNULL_END