貌似适用于iOS的GoogleCast SDK(至少我们附带了先前版本的3.3.0版本;也许此问题已在之后升级到的最新版本中修复,但我想确定)有时会在报告错误时将nil发送给委托人,即使注释声称其为非null。反过来,当我们尝试查看错误时,这会使我们的Swift代码崩溃。
假设我不想触摸上游标头,是否有任何方法可以覆盖标头中的可空注解?如果仅将委托方法定义为接收Error?
,则会收到警告。
答案 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
在这种情况下,您必须更新代码以始终包含包装标头而不是实际标头。
不幸的是,如果还有其他可空性注释,那么标头中的所有指针参数都必须定义其可空性。