2013-12-19 6 views
6

私はXCTestを使って単体テストに飛び込み、少し問題に遭遇しました。XCTAssert構文の配列の省略表現とメソッド呼び出しのエラー

私は速記配列の宣言と内側のメソッド呼び出しでXCTAssert文を書くとき、構文エラーがXcodeで吐き出される:

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

Xcodeでコンパイルエラー:

Expected identifier or '(' 

しかし、式の周りに角括弧を追加すると、動作します。

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

これは私の構文のいくつかがマクロに渡されることを許可されていないことと関係していますか? (XCTAssertマクロであると仮定すると)

答えて

7

XCTAssertは、可変引数リストを有するマクロある:最初の形態では

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

、プリプロセッサは

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

としてマクロ引数を解釈しますコンマで区切られています。

+0

うわー、素晴らしい答え!私は[NSArray arrayWithObjects:...]メソッドを使ってXCTAssert(...)呼び出し内で同様の問題を抱えていました。それをクリアしていただきありがとうございます! –

関連する問題