描述你的问题
Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)
警告如上
程序运行正常,全部加上__nonnull 就好了,为什么?
贴上相关代码
typedef void (^completionHandlerBlock)(NSURL * _Nullable localfile, NSURLResponse * _Nullable response, NSError * _Nullable error);
//NS_ASSUME_NONNULL_BEGIN
@interface DownLoadImages : NSObject
@property (nonatomic, strong) NSURL *imageURL;
- (instancetype)initWithURL:(NSURL *)contentURL;
- (void)startDownloadingImage:(completionHandlerBlock)completionHandler;
@end
.h文件
贴上相关截图
已经尝试过哪些方法仍然没解决(附上相关链接)
//NS_ASSUME_NONNULL_BEGIN
//NS_ASSUME_NONNULL_END
使用这个只能消除属性警告
これは
リーリーtypedef
の問題ではなく、定義したブロックに_Nullable
キーワードが含まれているためです。これを削除すると、警告は報告されません:解決策は 2 つあります:
_Nullable
キーワードを削除します。いずれにせよ、デフォルトは null 可能であるため、削除しても問題ありません。注意して
_Nullable
キーワードを保持し、警告を報告する各属性とパラメーターに_Nonnull
、_Nullable
、および_Null_unspecified
を追加します。あなたが言ったように、すべてに __nonnull を追加するのは安全ではないことに注意してください。属性を確認する時間がない場合は、属性が null である可能性が高いかどうかに基づいて、非 null を追加するか nullable を追加するかを選択するのが最善です。すべての
_Null_unspecified
ではなく、すべての__nonnull
を 1 つずつ追加する必要があります。これは、xcode6.3 バージョンで追加された新機能です。この属性を使用する限り、クラス内の変数とメソッドのすべてのパラメーターが考慮され、この属性が設定される必要があることを意味します。