ios - 使用typedef 属性出现Pointer is missing a nullability type specific 的警告
PHPz
PHPz 2017-04-17 17:30:11
0
2
886
  1. 描述你的问题

Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)

警告如上
程序运行正常,全部加上__nonnull 就好了,为什么?

  1. 贴上相关代码

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文件

  1. 贴上相关截图

  2. 已经尝试过哪些方法仍然没解决(附上相关链接)
    //NS_ASSUME_NONNULL_BEGIN

//NS_ASSUME_NONNULL_END
使用这个只能消除属性警告

PHPz
PHPz

学习是最好的投资!

membalas semua(2)
巴扎黑

Ini bukan masalah dengan typedef, ini kerana kata kunci _Nullable muncul dalam blok yang anda tetapkan. Jika anda mengalih keluarnya, amaran tidak akan dilaporkan:

typedef void (^completionHandlerBlock)(NSURL * localfile, NSURLResponse * response, NSError * error);

Terdapat dua penyelesaian:

  1. Alih keluar kata kunci _Nullable. Bagaimanapun, lalainya boleh dibatalkan, jadi tidak mengapa jika anda mengalih keluarnya.

  2. Tekun dan simpan kata kunci _Nullable, kemudian tambahkan _Nonnull, _Nullable dan _Null_unspecified pada setiap atribut dan parameter yang melaporkan amaran.
    Ambil perhatian bahawa adalah tidak selamat untuk menambah __nonnull pada semua seperti yang anda katakan. Sebaik-baiknya anda memilih sama ada untuk menambah nonnull atau nullable berdasarkan sama ada atribut itu berkemungkinan tidak mempunyai masa untuk melihatnya satu demi satu, Anda juga harus menambah semua _Null_unspecified, bukan semua __nonnull.

Ty80

Ini ialah ciri baharu yang ditambahkan dalam versi xcode6.3 Selagi anda menggunakan atribut ini, ini bermakna semua parameter pembolehubah dan kaedah dalam kelas mesti dipertimbangkan dan atribut ini mesti ditetapkan

.
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan