Rumah > Soal Jawab > teks badan
描述你的问题
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
使用这个只能消除属性警告
巴扎黑2017-04-17 17:32:11
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:
Alih keluar kata kunci _Nullable
. Bagaimanapun, lalainya boleh dibatalkan, jadi tidak mengapa jika anda mengalih keluarnya.
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
.
PHP中文网2017-04-17 17:32:11
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
.