所以我正在深入研究XCTest的单元测试,并遇到了一些问题。
当我在里面写一个带有简写数组声明和方法调用的XCTAssert语句时,Xcode中会出现语法错误:
XCTAssert([self hasStrings:@[ @"foo", @"bar" ]]);
在Xcode中编译错误:
Expected identifier or '('
但是,如果我在表达式周围添加更多括号,它将起作用:
XCTAssert(([self hasStrings:@[ @"foo", @"bar" ]]));
这是否与我的一些语法无法传递到宏有关? (假设XCTAssert是一个宏)
答案 0 :(得分:7)
XCTAssert
是一个带有可变参数列表的宏:
#define XCTAssert(expression, format...) \
_XCTPrimitiveAssertTrue(expression, ## format)
在第一种形式中,预处理器解释
[self hasStrings:@[ @"foo", @"bar" ]]
作为两个宏参数,用逗号分隔。