2013-08-23 3 views
5

stringWithFormat, 왜이 사항이stringWithFormat과 함께 NSAssert가 컴파일되지 않는 이유는 무엇입니까?

NSAssert(YES, [NSString stringWithFormat:@"%@",@"test if compiles"]); 

NSAssert(YES, @"test if compiles"); 

컴파일을 컴파일하지 않는 문자열을 반환해야합니까?

+0

string의 형식에서 매개 변수로 다시 문자열 만 사용하는 stringWithFormat은 중복됩니다. 나는 정확하게 모른다. 그러나 필자는 애플이 그러한 코드의 컴파일러 레벨 검사를 실시했을 수도 있다고 생각한다. 어설 션이 컴파일되지 않으면 어떤 오류/메시지가 나타 납니까? – CodenameLambda1

+0

외부 폐쇄 브레이스 – hakonbogen

답변

15

사용이 같이 당신을하는 데 도움이

NSAssert(YES, ([NSString stringWithFormat:@"%@",@"test if compiles"])); // Pass it in brackets() 

를 바랍니다.

9

stringWithFormat을 실제로 사용할 필요는 없습니다. NSAssert은 이미에 형식 문자열 및 서식있는 변수 인수를 전달해야합니다. 좀 더 현실적인 예를

NSAssert(YES, "%@", @"test if compiles"); 

을 또는 : 귀하의 예를 감안할 때, 당신은이 단지뿐만 아니라 작동 찾을 수 있습니다

:

NSAssert(i > 0, @"i was negative: %d", i); 

문제에 대한 이유는 다음과 같이 정의 NSAssert is a macro 때문에

#define NSAssert(condition, desc, ...) 

그리고 stringWithFormat의 매개 변수 목록과 매크로 자체의 매개 변수 목록 사이에 모호성이 있기 때문에 컴파일러가 혼란 스럽습니다. Nishant가 지적했듯이 실제로 여기 stringWithFormat을 사용하려는 경우 혼란을 피하기 위해 대괄호를 추가 할 수 있습니다.

+0

위대한 답변! 프레임 워크를 활용하는 것이 항상 좋습니다. –

관련 문제