stringWithFormat, 왜이 사항이stringWithFormat과 함께 NSAssert가 컴파일되지 않는 이유는 무엇입니까?
NSAssert(YES, [NSString stringWithFormat:@"%@",@"test if compiles"]);
때
NSAssert(YES, @"test if compiles");
컴파일을 컴파일하지 않는 문자열을 반환해야합니까?
stringWithFormat, 왜이 사항이stringWithFormat과 함께 NSAssert가 컴파일되지 않는 이유는 무엇입니까?
NSAssert(YES, [NSString stringWithFormat:@"%@",@"test if compiles"]);
때
NSAssert(YES, @"test if compiles");
컴파일을 컴파일하지 않는 문자열을 반환해야합니까?
사용이 같이 당신을하는 데 도움이
NSAssert(YES, ([NSString stringWithFormat:@"%@",@"test if compiles"])); // Pass it in brackets()
를 바랍니다.
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
을 사용하려는 경우 혼란을 피하기 위해 대괄호를 추가 할 수 있습니다.
위대한 답변! 프레임 워크를 활용하는 것이 항상 좋습니다. –
string의 형식에서 매개 변수로 다시 문자열 만 사용하는 stringWithFormat은 중복됩니다. 나는 정확하게 모른다. 그러나 필자는 애플이 그러한 코드의 컴파일러 레벨 검사를 실시했을 수도 있다고 생각한다. 어설 션이 컴파일되지 않으면 어떤 오류/메시지가 나타 납니까? – CodenameLambda1
외부 폐쇄 브레이스 – hakonbogen