【发布时间】:2016-07-17 11:42:40
【问题描述】:
最近我在 Xcode 中打开了CLANG_WARN_NULLABLE_TO_NONNULL_CONVERSION,但我的 Objective-C 代码中出现了与可空性相关的警告,这让我不知所措。最流行的一种警告类型是Implicit conversion from nullable pointer 'TypeA * _Nullable' to non-nullable pointer type 'TypeA * _Nonnull'。
我开始尝试通过在此处描述的方法中创建相同类型的本地来删除这些警告。 https://www.mail-archive.com/xcode-users%40lists.apple.com/msg02260.html 这篇文章说,首先使用一个本地对象,该对象的属性未指定可以为空,因此它可以用作期望非空的方法的合法参数。
但我觉得这是一种逃避行为,实际上并没有以任何有益的方式解决问题。
有人做过这个练习吗?如果您能分享您采取的策略,我将不胜感激。
【问题讨论】:
-
您要解决什么问题?当您知道对象不是 nil 时抑制警告?还是确保对象不为 nil 的实际过程?
-
@dan 假设我有如下代码:
NSMutableData* someData = [NSMutableData dataWithCapacity:d1000];[someData appendData:[NSString stringWithFormat:@"I like to win $%d", 1000000]];。因为appendData:期望一个非空值,所以解决方法是在调用之前首先创建 NSString*。理想情况下,我不想这样做,因为它只是添加了试图解决问题的额外代码行,并没有真正给我带来任何好处。 -
好处是警告不再存在。这是否值得额外的代码行取决于您。我认为它没有任何问题。
-
[NSString stringWithFormat:]可以返回nil或者不能。无论哪种方式,我都不明白为什么分配给中间变量会有所作为。如果编译器假设这样的变量不是nil,则编译器已损坏,我将禁用此警告。
标签: ios objective-c xcode objective-c-nullability