首先看一下现象:
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的指针