objective-c - 数组速记表达式和方法调用的 XCTAssert 语法错误

标签 objective-c xcode xctest

所以我正在使用 XCTest 进行单元测试,但遇到了一个小问题。

当我编写一个包含速记数组声明和内部方法调用的 XCTAssert 语句时,Xcode 中会出现语法错误:

XCTAssert([self hasStrings:@[ @"foo", @"bar" ]]);

在Xcode编译错误中:

Expected identifier or '('

但是,如果我在表达式周围添加更多括号,它将起作用:

XCTAssert(([self hasStrings:@[ @"foo", @"bar" ]]));

这是否与我的某些语法不允许传递到宏有关? (假设 XCTAssert 是一个宏)

最佳答案

XCTAssert 是一个带有可变参数列表的宏:

#define XCTAssert(expression, format...) \
    _XCTPrimitiveAssertTrue(expression, ## format)

在你的第一种形式中,预处理器解释

[self hasStrings:@[ @"foo", @"bar" ]]

作为两个宏参数,用逗号分隔。

关于objective-c - 数组速记表达式和方法调用的 XCTAssert 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20691305/

相关文章:

ios - 将值从统一 3D 传递到 objective-c 文件

xcode - 检测应用程序关闭

ios - Urban Airship 集成错误 arm64 不是被链接的架构 (armv7)

ios - 自定义委托(delegate)方法不适用于 iOS

xcode - 在 Xcode 单元测试中使用 @testable 时为 "No such module"

ios - Swift 中的 ARC 不可用方法

objective-c - 我可以在我的项目中创建 App Delegate 文件吗?

ios - CoreData 获取嵌套对象

xcode - 调用 XCTFail() 后 Swift 单元测试不会停止

ios - 我如何使用 Swift 对 NSFetchedResultsControllerDelegate(controllerWillChangeContent 和 controllerDidChangeContent)进行单元测试