Objective-C 对象字面量的隐式布尔转换总是求值为真 ios

Implicit boolean conversion of Objective-C object literal always evaluates to true ios

我最近下载了 Xcode 9.2 并将我的项目设置更新为推荐。现在我在我的代码中收到此警告,用于我使用 assert 的所有地方,例如:

assert(@"Must be implemented by subclass");

什么是合适的选择?

您的 assert 条件是一个始终会通过测试的字符串。

您应该检查 assert

中的条件

如果您正在使用 Objective-C,您希望调用 NSAssert(),而不是 assert()(这是一个 C 函数)。

NSAssert(NO, @"Must be implemented by subclass");

如果您想继续使用 assert(),您应该将其视为 C 函数。

assert(0); // <-- Note: no message is provided

你可能会逃脱

assert(/* Must be implemented by subclass */ 0);

assert("Must be implemented by subclass" == NULL); // <-- Note: No `@`

a) assert 需要一个条件来检查。您将字符串视为条件并且它是非空的... do

b) 你使用的是 NSString 而不是 char*,所以你将 objC 对象传递给 C,这在这种情况下也不起作用 ... do

assert(codition & "Message");

c) 你应该为 ObjC 代码使用 NSAssert .. do

NSAssert(codition, @"Message");