XCTAssert语法错误与数组速记表达式和方法调用

时间:2013-12-19 20:43:26

标签: objective-c xcode xctest

所以我正在深入研究XCTest的单元测试,并遇到了一些问题。

当我在里面写一个带有简写数组声明和方法调用的XCTAssert语句时,Xcode中会出现语法错误:

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

在Xcode中编译错误:

Expected identifier or '('

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

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

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

1 个答案:

答案 0 :(得分:7)

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

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

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

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

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