关于引入 __nullable 代码段以下指针类型发出警告问题 & 以及解决方案

245 阅读1分钟

首先看一下现象:


block携带参数 btnTitleString 可以为nil 故引入__nullable 这段代码以下都会发生警告 ⚠️


原因

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


解决方案:

NS_ASSUME_NONNULL_BEGIN

- (void)kg_setContentWithModel:(KGCourseDetailModel *)model;

@property (nonatomic ,copy) KGCourseDetailBottomViewClikeHandle clickHandle;

NS_ASSUME_NONNULL_END

解决效果:


解释:

苹果引入 NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END 两个宏环绕代码段的方式解决,所有简单指针对象都被假定为nonnull,因此我们只需要去指定那些nullable的指针