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的主要内容,如果未能解决你的问题,请参考以下文章