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");
我最近下载了 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");