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

Posted

技术标签:

【中文标题】Objective-C 对象字面量的隐式布尔转换总是计算为真 ios【英文标题】:Implicit boolean conversion of Objective-C object literal always evaluates to true ios 【发布时间】:2018-01-03 15:09:16 【问题描述】:

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

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

什么是合适的替代方案?

【问题讨论】:

【参考方案1】:

如果你使用的是 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 `@`

【讨论】:

【参考方案2】:

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

您应该检查assert 中的条件

【讨论】:

【参考方案3】:

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

b) 您使用的是 NSString 而不是 char*,因此您将 objC 对象传递给 C,这在这种情况下也不起作用...做

assert(codition & "Message");

c) 你应该对 ObjC 代码使用 NSAssert .. 做

NSAssert(codition, @"Message");

【讨论】:

以上是关于Objective-C 对象字面量的隐式布尔转换总是计算为真 ios的主要内容,如果未能解决你的问题,请参考以下文章

[2016-02-08][javascript][数据类型的隐式转换]

关系运算符中的隐式转换

js 的隐式转换与显式转换

MySQL性能优化:MySQL中的隐式转换造成的索引失效

C++ 类的隐式转换

25.scala的隐式转换