如何在Objective-C SDK中覆盖错误的可空性注释?

时间:2018-08-07 05:17:32

标签: objective-c swift nullable

貌似适用于iOS的GoogleCast SDK(至少我们附带了先前版本的3.3.0版本;也许此问题已在之后升级到的最新版本中修复,但我想确定)有时会在报告错误时将nil发送给委托人,即使注释声称其为非null。反过来,当我们尝试查看错误时,这会使我们的Swift代码崩溃。

假设我不想触摸上游标头,是否有任何方法可以覆盖标头中的可空注解?如果仅将委托方法定义为接收Error?,则会收到警告。

1 个答案:

答案 0 :(得分:0)

如果标头包装在NS_ASSUME_NONNULL_BEGIN / NS_ASSUME_NONNULL_END中,并且标头中没有其他可为空的指针,则可以制作一个包装器标头,以取消定义该宏并在末尾重新定义它。像这样:

#ifdef NS_ASSUME_NONNULL_BEGIN
#undef NS_ASSUME_NONNULL_BEGIN
#endif 
#ifdef NS_ASSUME_NONNULL_END
#undef NS_ASSUME_NONNULL_END
#endif

#import "header with bogus prototype.h"

#ifndef NS_ASSUME_NONNULL_BEGIN
#define NS_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin")
#endif
#ifndef NS_ASSUME_NONNULL_END
#define NS_ASSUME_NONNULL_END   _Pragma("clang assume_nonnull end")
#endif

在这种情况下,您必须更新代码以始终包含包装标头而不是实际标头。

不幸的是,如果还有其他可空性注释,那么标头中的所有指针参数都必须定义其可空性。